88
季刊 2019 年 03 月 13 2019 年 03 月 深度·讲坛22 deepin, 为用户而生 02 2018 深度科技大事记 04 龙芯平台“深度云存储”正式发布 28 网信领域的国产化很可能 “先进替代落后” 深度人·在说深度·春秋行业·观察深度·社区深度·伙伴73 Deepin Builds a Better Linux Desktop 39 深度你还缺啥 准印证号(鄂)4300107 www.deepin.com 深度操作系统公众号 内部资料 免费发放 44 wine 调试日志实现和实践 50 从 kprobes 到 ftrace 【深度·案例】 60 洪山区电子公文全国产化项目 特别策划P06 P34 深度操作系统 15.9 跬步千里 厚积薄发

跬步千里...邮箱投稿 市场推广 [email protected] 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

季刊 2019 年 03 月

13期

2019 年 03 月

【深度·讲坛】

22 deepin, 为用户而生

02 2018 深度科技大事记04 龙芯平台“深度云存储”正式发布

28 网信领域的国产化很可能 “先进替代落后”

【深度人·在说】

【深度·春秋】 【行业·观察】

【深度·社区】 【深度·伙伴】73 Deepin Builds a Better Linux Desktop39 深度你还缺啥

准印证号(鄂)4300107

www.deepin.com深度操作系统公众号

内部资料 免费发放

44 wine 调试日志实现和实践50 从 kprobes 到 ftrace

【深度·案例】60 洪山区电子公文全国产化项目

【特别策划】

P06

P34 深度操作系统

15.9跬步千里厚积薄发

Page 2: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

2 2019.01

策划 武汉深之度科技有限公司

编辑 《deepin集结》杂志编辑部

总编辑 刘闻欢副总编许 可

执行编辑秦 娣编 辑

王 棣 王明栋采 编

李会会 黄锦敏美术设计 

云 云

网 站

邮箱投稿

市场推广

武汉联络处地 址

武汉市光谷大道77号光谷金融港B18栋6楼

邮 编电 话

北京联络处

地 址 北京市西城区新街口外大街28号普天德胜B座603室

邮 编电 话

上海联络处地 址

上海市长宁区愚园路绿地商务大厦1601室

邮 编电 话

准印证号承印单位 出版日期发放对象

Hosted by Wuhan Deepin Technology Co., Ltd.Edited by Editorial Office of DEEPIN JIJIE

Editor-in-chief Liu Wenhuan Deputy EditorXu KeExecutive EditorQin DiEditor Wang Di Wang Mingdong Assistant Editor Li Huihui Huang JinminArt Editor Yun Yun

Website http://www.deepin.comContribution [email protected] [email protected]

Wuhan OfficeAddress The 6th Floor, Building B18, FinancialHarbour, No. 77, Optics Valley Avenue, Wuhan, China430223+86-27-87805607

Beijing OfficeAddress Room 603, Tower B, Xinwai Street No.28,XiCheng District, Beijing, China100088+86-10-62669499

Shanghai OfficeAddress Room 1601, Greenland Business Building, Yuyuan Road, Changning District, Shanghai200052+86-21-62669499

本刊为非盈利性杂志,用于传播企业文化,交流学习技术经验版权所有,未经同意不得转载。

(鄂)4300107 武汉金港彩印有限公司 2019年03月 公司员工、用户及合作伙伴、Linux爱好者

卷首语

2018年,深度团队及深度操作系统屡获殊

荣,奖项涉及中国版权最具影响力企业、

中国国际软件博览会优秀产品奖、中国优

秀开源项目二等奖、最受欢迎中国开源软

件奖等等。

深度团队自2011年组建商业公司以来,一

直保持初心,立志做出最符合中国用户使

用习惯的Linux操作系统软件,并一直致

力于解决易用问题,从打印机等外设的适

配,到丰富常用软件,再到深度商店的建

立健全,深度团队一直在不断向前推进。

2019年,深度团队除了要完成既定版本的

发布之外,还将继续与各国产CPU厂商加

紧合作,使深度操作系统在越来越稳定的

同时,扩展硬件平台,并将加紧软件生态

的建设。

2019首届深度软件开发大赛于3月拉开了帷

幕,深度团队联合国内优秀的CPU厂商,

共同向全球开发者发出邀请,希望有越来

越多的企业、团队、开发爱好者、高校师

生关注国产CPU的软件生态建设,并积极

参与到建设中来。

一点一滴,步步累计,深度团队坚信,有

志者,事竟成。

Page 3: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

1www.deepin.com

目录 季刊·总第 13 期2 0 1 9 年 0 3 月

深度·春秋

行业·观察

深度·社区

深度·讲坛

深度·案例

深度·伙伴

02 34

28

38

44

40

64

深度·策划

28 网信领域的国产化很可能“先进替代落后”

02 2018 深度科技大事记——不负所望,稳步向前 04 龙芯平台“深度云存储”正式发布——安全可靠,云端存储06 深度操作系统 15.9——跬步千里 厚积薄发10 深度操作系统亮相第七届太湖论坛暨自主可控大数据与人工智能大会12 安全保障 可靠运行——第四次安全可靠技术和应用研讨会15 深度科技荣获 TOP100 志愿服务先锋企业16 深度科技荣获 2018 年度中国版权最具影响力企业18 deepin 团队荣获首届中国优秀开源项目二等奖 20 deepin 荣获 2018 年度最受欢迎中国开源软件 TOP20

44 wine 调试日志实现和实践50 从 kprobes 到 ftrace55 理解 memory barrier58 记一次 SPECjvm2008 问题排查

40 洪山区电子公文全国产化项目

64 Deepin 15.9: Desktop-Linux leicht gemacht68 Meet The Linux Desktop That Blows Away Windows 10 And MacOS73 Deepin Builds a Better Linux Desktop81 deepin15.9+ 花生壳盒子 , 国产软硬件也能享受丝滑的内网穿透

38 体验过几款流行的 linux 发行版之后,我发现 deepin 才是 最适合国内用户入门的发行版 39 深度你还缺啥

深度人·在说22

22 deepin, 为用户而生

2019首届深度软件开发大赛1

2

4

3

5

作品征集阶段2019 年 3 月 1 日 -6 月 1 日

作品初选阶段2019 年 6 月 1 日 -7 月 1 日

国产软硬平台支持阶段2019 年 7 月 1 日 -9 月 1 日

通过初赛作品的终审2019 年 9 月 1 日 -10 月 1 日

颁奖阶段2019 年 10 月 -11 月

Page 4: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·春秋

2 2019.01

2018 深度科技大事记——不负所望,稳步向前

2018 年,时间好像过的格外的快,这一年发生了很多大事情:中兴被制裁、英特尔芯片漏洞、多国政府弃用 windows 以及 Facebook 爆出史上最大数据泄露丑闻……

2018 年,deepin 也有很多大事情发生:发布了针对华为 ARM 的服务器版操作系统,与向日葵、360 浏览器等完成适配,加紧操作系统国产化的研发进程……

这 一 年, 有 越 来 越 多 的 用 户 第 一 次 听 说deepin, 第 一 次 安 装 deepin, 第 一 次 深 入 使 用deepin,从而有越来越多的用户开始向身边的朋友推荐这款好用的国产操作系统——deepin。

正是因为用户数量的不断攀升,我们的团队更加干劲十足,这不仅是为了给用户多一种选择,也是为了做最好的自己。

下面小编整理一份清单,带你了解 deepin 的2018 年吧!

荣誉:2018 中国国际软件博览会优秀产品奖2018 安全可靠奋进者2018 最佳企业服务商2018 年度中国版权最具影响力企业

中国优秀开源项目二等奖TOP20 2018 年度最受欢迎中国开源软件TOP100 志愿服务先锋企业第七届中国国际版权博览会金慧奖 - 优秀企业奖

项目:国家级正版化软件试点项目国家工商总局企业信用信息公示系统信息化项目装备云信息中心项目中联部正版化项目科技部 01 重大专项科技部虚拟化项目国家网信办国产操作系统软件生态构建项目国土资源部电子政务内网建设与集成项目工信部电子第五研究所服务项目环保部信息中心生态环境大数据项目中国船舶重工集团第 709 研究所某项目北海政法委正版化项目北京高压科学研究中心项目云南省公安厅正版化项目河南省农村商业银行国产化项目湖北省工业技术软件化开源社区建设项目临沂大学桌面与服务器项目重庆电子政务外网身份认证项目天天快递正版化项目等众多涉密项目等全国多省市、企事业单位正版化项目

Page 5: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin News

3www.deepin.com

产品发布龙芯平台“深度云存储”正式发布深度操作系统海思平台服务器版软件 V15.2 发布深度操作系统 15.8 发布——极致体验,美观高效深度商店 V5.1 发布深度编辑器 V1.0 正式发布——自由编辑,随心由我深度操作系统 15.7 发布—— 性能好才是真的好深度商店 V5.0 正式版发布——好应用好管理深度操作系统 15.6—— 细节中寻求突破文件管理器 V1.7 正式发布深度帮助手册 V2.0 发布——帮助,不“只”一点深度系统监视器 V1.4 正式发布深度字体安装器 V1.0 正式发布深度系统修复工具 V1.0 发布——哪里不对修哪里深度录屏 V2.7.3 正式发布

展会2018 第一次安全可靠研讨会强网杯—网络空间军民融合先进技术成果展“纪念‘4·19’讲话发表两周年暨关键信息基础设施自主安全创新论坛2018“为爱而走”第七届血友病日慈善健走大会首届数字中国建设成果展览会北京国际互联网科技博览会网络安全自主可控发展与推进研讨会2018 第二次安全可靠研讨会第二十二届中国国际软件博览会第二届军民融合智能装备高端论坛暨自主可控项目研讨会“纵横”网络空间安全创新论坛自主可控大会国产软件应用试点总结会中移在线通信技术峰会暨 FreeSWITCH 开发者沙龙2018 中国国际智能产业博览会

第十四届南京博览会2018 年武汉市网络安全嘉年华2018 第三次安全可靠研讨会全国版权博览会2018 首届青岛军民融合科技创新成果展青岛保密展太湖论坛2018 第四次安全可靠研讨会

活动2018 为爱而走,大型慈善健走活动2018 第八届深度开发者与用户大会湖北省某镇中学信息安全教育宣讲活动2018 web 前端大会Google DevFest 2018 广州国际嘉年华

其他深度周边商城正式上线

深度操作系统在 2018 年收获满满,也希望这份答卷能够让支持和拥护我们的广大用户更加满意。

Page 6: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·春秋

4 2019.01

深度云存储产品是武汉深之度科技有限公司针对安全可靠国产 CPU 平台发布的企业级私有云存储产品, 为用户在安全可靠平台上提供面向文件数据的管理、协同、共享、多端访问的一站式解决方案。

目前,在安全可靠国产 CPU 平台上的文件共享主要依靠传统的局域网共享方式,尚无一套完整的私有云存储方案,深度云存储产品基于优秀的上游开源云存储产品 seafile 在龙芯平台上重新构建,在继承开源产品强大稳定的云存储功能的基础上,可以为用户提供国产化平台上的可定制私有云存储解决方案。

龙芯平台“深度云存储”正式发布——安全可靠,云端存储

深度科技 产品部 / 文

本次在龙芯平台的产品发布包括私有云存储的服务器软件和桌面客户端软件,服务器后台可对企业内部使用云存储的用户账号及服务端设置进行管理,并允许用户通过浏览器访问私有云上的文件。

龙芯桌面上的深度云存储客户端软件支持与私有云端的文件进行同步,支持多用户对共享的文件进行协同操作。

此外,龙芯平台上的深度云存储服务器端支持seafile 原生的手机客户端通过局域网接入并访问云端的文件,实现国产化平台下私有云的多终端访问。

Page 7: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin News

5www.deepin.com

深度科技专注于基于 Linux 的操作系统的产品研发,面向党政、金融、能源、教育、医疗等行业提供基于 Linux 操作系统的解决方案、技术支持和培训等专业服务。

深度科技将致力于在该平台上为用户提供更专业的企业化云计算、虚拟化解决方案技术支撑,提供更高效能的开源云基础设施选项,完成国产化云平台突破。用户与合作伙伴,可以陆续从深度科技获取到面向企业级虚拟化管理的解决方案、分布式存储解决方案、大数据平台解决方案。

服务器下载地址 服务端软件:http://www.deepin.com/downloads/cloudstorage/cloudstorage-server.tar.gz

客户端软件:http://www.deepin.com/downloads/cloudstorage/cloudstorage-client.tar.gz

百度网盘下载地址:https://pan.baidu.com/s/1S08XxPMGO5ebJLLbZh46Lg

Page 8: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·春秋

6 2019.01

深度操作系统是一个致力于为全球用户提供美观易用、安全可靠的 Linux 发行版。

深度操作系统基于 Linux 内核,是一款以桌面应用为主的开源 GNU/Linux 操作系统,支持笔记本、台式机和一体机。深度操作系统(deepin)包含深度桌面环境(DDE)和近 30 款深度原创应用,及数款来自开源社区的应用软件,支撑广大用户日常的学习和工作。

另外,通过深度商店还能够获得近千款应用软件的支持,满足您对操作系统的扩展需求。深度操作系统由专业的操作系统研发团队和深度技术社区(www.deepin.org)共同打造,其名称来自深度技术社区名称“deepin”一词,意思是对人生和未来深刻的追求和探索。

深度操作系统 V15.9 修复了大量已知问题,对现有功能进行了优化。与上一个版本相比较新增了触摸屏手势和屏幕键盘支持,提升了启动器小窗口应用排列的算法,同时推出了全新的智能镜像源概

念,希望给用户带来更稳定、更效率的操作体验。

从 V15.8 发布之后,深度操作系统更新采用滚动更新的策略,定期发布更新。因此 V15.9 的内容涵盖了从 V15.8 之后每个周期内更新的内容。

新增的功能多种手势,轻触即发

支持单击、双击、唤出右键菜单、上下滑动等多种触摸屏手势。

搭配屏幕键盘,让您随心所欲,手指点到即得到。

Page 9: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin News

7www.deepin.com

随机应变,识变从宜推出智能镜像源概念,开启后会自动匹配帮助

您到响应最快的镜像源,下载、安装更省心。

电源管理,便捷有效更加人性化的笔记本电脑电源管理方式。无论

您是否连接电源,都能方便的更改不同场景下配置。

修复的缺陷与改进的功能

控制中心:* 增加启动菜单列表拖拽更换新图片* 修复键盘模块导致崩溃的问题* 支持用户密码强度检查* 修复默认程序列表没有刷新的问题* 修复自动下载关闭后没有隐藏提示的问题* 修复时间设置页面的时间不正确* 修复更新存在空指针异常

Page 10: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·春秋

8 2019.01

* 修复搜索语言后没有标识当前的语言

启动器:* 修复启动器从小窗口切到全屏模式后无法拖拽图标到任务栏* 修复搜索后无法使用快捷键

桌面:* 提供屏幕保护功能* 修复登录界面的版本描述没有跟随用户语言的问题* 修复登录界面 logo 有截断的问题* 新增密码错误验证次数限制* 添加 swap 分区判断和休眠功能* 添加屏幕键盘

任务栏:* 优化任务栏图标大小变化时的动画* 优化触摸屏相关操作* 新增时尚模式托盘收起和展开动画* 修复时间插件禁用状态重启后无效的问题* 修复拖拽时尚模式托盘时托盘依然显示的问题* 修复由于网络插件导致的崩溃* 修复时尚模式托盘插件排序重启后失效* 修复时尚模式托盘插件保存的展开状态重启后失效* 新增屏幕键盘插件* 新增托盘图标的 hover 状态提示

文件管理器:* 修复在计算机页面右键菜单打开磁盘时会提示“卷未实现挂载”的错误提示* 部分 UI 调整和错误修复* 优化了重命名时选中文字的背景* 修复了最近使用中搜索的若干问题* 优化文件管理器中可移动设备的三角图标行为* 支持预览 gif 图片* 支持苹果设备查看应用内文件* 修复部分情况无法设置默认应用的问题

* 低版本 Qt 上的编译支持* 文件夹尺寸显示为 '-'* 修复最近文件刷新问题* 调整文件系统类型检查逻辑* 在使用内核挂载 ntfs 分区时不再显示关闭快速启动的提示* 完善最近文件协议的支持* 修复部分情况下移除 u 盘可能导致 samba 挂载对应的显示项目消失的问题 * 修复回收站中列表模式下表头点击删除时间排序行为不正确的问题 * 修复托盘挂载插件在切换主题时不会及时更新图标的问题* 调整计算机视图中的图标间隔* 打开方式对话框支持触屏滚动 * 调整暗色主题下列表模式中的表头分割线颜色* 完善列表模式下的触屏滚动支持 * 修复在列表模式时,扩展名始终会被显示为小写的问题* 修复双击失效的软链接会询问两次删除对话框的问题

安装器: * 修复 uefi 下无法探测 windows 来调整时间的问题 * 修复高级分区崩溃的问题

应用商店:* 修复其他语言环境下商店无法正常显示的问题* 增加了在线应用列表功能* 支持自动同步安装应用* 支持查看赞赏列表和时间* 支持查看自己的所有评论

深度影院:* 优化字幕字体样式* 播放电影时保持屏幕常亮* 支持触摸屏窗口拖动* 支持文件管理器最近使用文件标准

Page 11: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin News

9www.deepin.com

深度音乐:* 修复播放列表为空时通过文件关联打开深度音乐时,列表项目重复的问题

深度显卡驱动管理器:* 修复 n 卡切换默认驱动失败* 新增暗色主题* 修复使用空格键会出现重复安装的问题

深度看图:* 修复无法双击打开 svg 文件的问题* 修复右下角预览关闭按钮不显示* 修复鼠标样式问题* 修复打开图片无法自适应* 打印支持预览* 修复将大图片缩小打印时模糊* 支持文件管理器最近使用文件标准* 切换图片时按照文件名排序

深度终端:* 支持鼠标中键关闭标签页* 支持设置选中文字后自动复制文字到剪切板* 修复大写锁定或数字锁定开启时,“Ctrl+ 点击”不能在浏览器中打开链接的问题 * 触屏优化

深度编辑器:* 优化触屏体验* 支持打开编辑 m3u8 文件* 修复缩写命令 dedit 语言不正确问题* 编码探测尼泊尔语* 修复另存为时内容消失* 添加原文件已丢失的提示* 支持触屏操作* 添加底部信息栏 ( 显示行列信息,编辑状态,编码选择,高亮选择 )

* 标签栏显示只读信息* 设置窗口加入自动换行选项* 增加 F5 刷新* 支持高亮括号功能* 主题优化

已知但未修复的缺陷* 更改 gif 图片后缀名为 png,无法用深度看图查看动图* 屏保有时无法预览(点击后只有一个黑色的背景)* NTFS 文件系统上的隐藏在文件管理器中还会显示* 2D 窗管下,使用 Super+D 快捷键显示桌面后,此时进入到壁纸设置界面,桌面没有被隐藏* 在 vpn 编辑界面,名称输入框切换到中文,输入后,再点击密码输入框,输入法还显示是中文输入

ISO 下载方式64 位:https://www.deepin.org/download/

关于我们深度操作系统是一款针对普通用户发行的开源

Linux,您可自由下载、分发、修改和使用。

欢迎您关注我们的微博、微信(深度操作系统)、Twitter、Facebook、Github 以第一时间获取最新动态和源代码,同时也欢迎您前往我们的社区论坛,与广大社区成员交流和分享您的快乐。

最后,我们郑重感谢为深度操作系统提供测试、文档、翻译和镜像支持的社区团队与企业,感谢您的无私的贡献,开源有您更精彩。也要感谢一直支持、理解和等待我们的用户,是您给了深度操作系统不断前行的动力,和不断自我修正的勇气。

Page 12: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·春秋

10 2019.01

深度操作系统亮相 CCF 第七届太湖论坛暨自主可控大数据与人工智能大会

深度科技 市场部 / 文

2018 年 12 月 7 日,由中国计算机学会主办,中国计算机学会无锡分部和无锡市计算机学会联合承办的“CCF 第七届太湖论坛暨自主可控大数据与人工智能大会”在无锡顺利召开。

为确保国家对未来信息高地的完全掌握,必须实现自主可控关键软硬件产品在大数据及人工智能应用领域的全面应用推广,从而实现信息领域的弯道超车,本次大会的主题为“强强联合,打造自主可控大数据与人工智能生态”,旨在推动自主可控技术在大数据与人工智能领域的深度融合,通过广泛深入的技术交流与自主可控产品的集中展示,进一步为未来自主可控技术在大数据与人工智能领域

的研究推广探明方向。

会议特别邀请了中国工程院副院长陈左宁院士,中国工程院倪光南院士做主题演讲,同时邀请了大数据与人工智能领域专家,学界精英以及华为,阿里巴巴,腾讯,百度等重量级企业的技术高管做精彩报告,会议期间还现场展示了国内相关自主可控产业的技术及产品成果,分享行业的最新技术与实践经验,共商国产服务器、大数据软硬件、人工智能应用的发展大计。

深度科技作为申威产业联盟的重要成员之一,在此次论坛中展示了稳定高效·美观易用的深度操作系统。

Page 13: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin News

11www.deepin.com

经过近些年来市场的检验与技术的沉淀,深度操作系统逐步改进技术、加强研发,在 2018 年取得了进步与成绩,更是加强了与国产软硬件企业的联合,寻求更多的合作,共同建立国产信息化生态发展的良性环境。

深度操作系统目前已完成或对接了 360、绿盟科技、杭州安恒、启明星辰、中科网威等国内主流的网安公司,形成了基于申威处理器 + 深度操作系统的网络安全产品开发平台。除此之外,深度操作系统还针对龙芯、飞腾、兆芯、X86 等多种架构发布了多款产品,可以使用户在不同的硬件条件下,体验到相同用户体验的深度操作系统产品。

为了提升全国产环境下的用户体验,深度操作系统一直致力于解决软件少的问题,除了开发多种深度原生应用加以补充,还积极地与国内主流数据

库、中间件、安全软件构建长期合作和适配,基本满足了全国产环境下办公的问题,未来,深度操作系统将不遗余力地继续扩大与国内各优秀软件厂商的合作,并将积极配合适配工作。

自 2015 年以来,深度操作系统参与了装备发展部和部分军种的操作系统相关预研项目,并支持了多个军种的装备和信息化项目。2016 年以来,参与了多个核高基项目,范围涉及国产芯片产业化操作系统平台支撑、党政办公操作系统平台研发与推广、操作系统基础版本共性技术研究等,深度操作系统也通过核高基项目的建设提高了产品能力,在国产化环境里将更适应党政办公及信息系统业务需求。

深度操作系统系列产品背后,是一支年轻具有活力,专业又具创新精神,并专注于 Linux 操作系统的研发团队,以提供安全可靠、美观易用的国产操作系统与开源解决方案为目标,支持操作系统研发、行业定制、国际化、迁移和适配、交互设计、支持服务与培训,能够满足不同用户和应用场景对操作系统产品的广泛需求。相信在未来,深度操作系统通过与国内众多优秀企业的合作,能够取得长足的进步,研发出更加符合中国国情的操作系统产品。

Page 14: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·春秋

12 2019.01

安全保障 可靠运行第四次安全可靠技术和应用研讨会

深度科技 市场部 / 文

2018 年 12 月 21-22 日,由广东省工业和信息化厅、安全可靠技术和产业联盟主办、工业和信息化部电子第五研究所、广东软件行业协会承办的“第四次安全可靠技术和应用研讨会(以下简称“研讨会”)”在广州白云国际会议中心举办。

本次会议安排新产品及新应用发布 50 场,共51 家企业参加安全可靠技术和应用展览(以下简称“展览会”),涉及内容包括:安全可靠芯片、操作系统、整机、数据库、中间件、办公软件、网络、流版签等安全可靠产品,以及云平台、监督平台、办公系统、数据迁移平台等安全可靠应用。

深度操作系统作为奋斗在安全可靠领域的成员单位,参加了此次研讨会及展览会。

新产品发布在此次研讨会中,深度科技发布了“深度操作

系统 ARM 服务器版软件 v15.2 和基于华为海思平台的云计算解决方案”。

深度科技研发团队经过近年来技术沉淀,在基于深度操作系统产品上已积累了大量的技术经验,此次结合华为自研海思 CPU 平台特性,通过整合上游社区资源,研发了针对 Hi16xx CPU 平台的深度

Page 15: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin News

13www.deepin.com

服务器操作系统产品。该产品经过深度科技和华为的共同严格测试,整体系统稳定可靠、性能卓越,可以为企业级应用提供全面可靠的保障。

深度合作、先云一步在泰山服务器突出的性能基础上,我们做了大

量的虚拟化能力评估,评估的结果证明,深度和海

思平台具有良好的云计算支撑能力,并可以形成对传统 X86 平台的替换条件。

于是深度科技将技术方向聚焦在了云计算与大数据基础设施之上,将自身价值定位在“为合作伙伴创造云基础设施能力,推动生态快速健全”的方向上。

完整的云技术栈目前深度操作系统和海思平台已经具有完整的

云服务技术栈,用户可以从深度科技获取到海思平台完善的云架构技术支撑。

这些技术支撑除了操作系统外,还包括分布式存储、虚拟网络管理、虚拟化、镜像管理、集群监控、编排与管理、大数据支持等组件,并已全部就绪。

深度欢迎合作伙伴积极的选择 OpenStack 等平台开发云计算基础设施,并选择深度操作系统和成熟、就绪的工具集,来快速的构建面向用户场景和行业需求的云计算平台。

Page 16: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·春秋

14 2019.01

价值与目标·完成国产化云平台突破,帮助集成商及其他合

作伙伴落地国产化容器云。·提供国产化平台上支持完整 IAAS 能力的虚拟

化解决方案。·为用户提供更专业的企业化云支撑平台、分布

式存储和大数据基础设。·为大型混合云架构提供基础技术支撑。

安全可靠应用展在此次安全可靠技术和应用展览会中,深度科

技展示了基于龙芯 3A3000 的笔记本电脑。

龙芯 3A3000 与深度操作系统龙芯版软件共同搭建了安全可靠的办公环境,内置深度软件商店,应用软件涉及办公学习、网络应用、视频播放、社交沟通、阅读翻译等,应用数量近千款。

保障安全可靠环境的稳定演示深度科技截至目前,已连续稳定支持了三次安

全可靠技术和应用研讨会的大屏演示工作,采用的安全可靠设备为龙芯 3A3000,内置最新的深度操作系统龙芯版软件,演示文稿为金山 WPS、永中office。

此次“国产 CPU+ 国产 OS+ 国产办公软件”的组合,两天共支持了 53 个嘉宾演讲,全程流畅、稳定,除了保障此次研讨会的安全可靠性之外,也向与会领导、嘉宾展示了国产软硬件的实力。

2019 年,深度科技除了要持续更新和优化基于各国产 CPU 平台的操作系统软件之外,更将逐步加紧对与国产上下游厂商的合作,共建安全可靠的完整生态,为我国信息安全贡献力量。

Page 17: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin News

15www.deepin.com

深度科技荣获 TOP100 志愿服务先锋企业

深度科技作为致力于国产操作系统研发与服务的年轻团队,今年收到了一份特殊的荣誉,那就是“TOP100 志愿服务先锋企业”。

在 2017-2018 年, 深 度 科 技 连 续 2 年 参 加 了“RUN WITH LOVE 为爱而走·世界血友病日”慈善健走大会,该项活动是北京每年最大规模的慈善健走活动,2012-2018 年间连续举办了 7 年,累计有25,000 家中外企业,超过 150 万白领员工参与,旨在呼吁社会关注罕见病,关注血友病群体。

深度科技目前处于创业初期,团队在关注国产操作系统发展,并致力于打造国产操作系统生态的同时,也在积极地关注公益事业,希望凭借自己微

博之力,回馈社会。

2018 年 9 月,深度科技也通过授课的方式,向湖北省某镇一中学讲解了国产操作系统发展的重要意义和现阶段的发展情况,希望更多的年轻一代学子在内心深处埋下为国家信息安全贡献知识的种子。

深度科技在关心助力乡村教育的同时,也为湖北省孝感市某村捐款 15 万元,用于修建村里的公路。希望通过深度科技的微薄贡献,帮助那里的孩子走出乡村,用自己的勤劳与智慧,知识与能力开创自己的未来,也希望借此让更多的老师和孩子们对信息产业有所接触,加入到像深度科技这样的团队,为祖国的科技强国战略添砖加瓦。

Page 18: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·春秋

16 2019.01

深度科技荣获

2018 年度中国版权最具影响力企业 深度科技 市场部 / 文

2018 年 12 月 1 日,2018 年中国版权年会在武汉举行。年会由中国版权协会主办,以“新时代助力文化发展”为主题。

这是中国版权年会首次在首都以外的城市举办,中国版权协会会员代表,著作权人、权利人组织及版权产业界的代表,版权教学科研、法律事务、新闻媒体代表等共 300 余人出席年会。

此次年会颁布了“2018 年中国版权最具影响力

企业”,该奖项是中国版权协会设立的重要奖项,旨在鼓励在版权创造、运用、保护和管理等方面作出贡献的优秀企业。

依据评选条件和推荐单位的推荐意见,经专家评审委员会评委无记名投票,武汉深之度科技有限公司入选“2018 年度中国版权最具影响力企业”。

2018 年,深度科技完成了“云梦县国家级正版化软件试点项目”的验收工作,深度科技在项目中

Page 19: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin News

17www.deepin.com

为全县 48 个党政机关共 528 台电脑,安装国产操作系统软件 488 台,满足实施安装率 92.42%;其中安装单系统的电脑 408 台,占比 83.61%。

深度科技团队在云梦县各党政机关试点办公中,解决了涉及软件厂商迁移衔接、系列驱动程序优化、业务系统实用技术迁移等关键技术问题,并按类分解,集中骨干力量,使软件功能更加完善,性能更加稳定,运行更加顺畅。最终使全县 48 个党政机关试点的真实使用用户认可了国产操作系统。深度操作系统定型正式安装以后,没有出现擅自卸载的现象。

“真用第一、分步推进”的 “云梦模式”也将成为国产操作系统软件向全国推行的重要里程,云

梦县县长对此次国家级国产软件应用试点的工作给予了高度评价。

软件正版化工作事关国家知识产权保护,事关国家和企业信息安全,事关企业的诚信和规范管理,推进软件正版化工作具有重要意义。而在关键领域和关键业务范围进行国产化,以保证信息化的基础安全,已经成为了信息化安全保障的趋势。

未来,深度科技将打造更加稳定的操作系统,积极扩建软件生态,将真实用户的反馈积极整理、快速解决,形成系统性的项目解决方案,服务国家国产软件的推动工作,为国家信息安全及国产操作系统的发展贡献力量,将体现国家技术实力、早日实现安全可靠事业作为己任。

Page 20: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·春秋

18 2019.01

在第八届中国云计算标准和应用大会上,中国开源云联盟公布了“首届中国优秀开源项目奖”,旨在鼓励行业内各方结合具体技术领域的应用情况,在积极参与国际开源项目的同时,找准差异化发展路径,创新培育和孵化一批本土开源项目,营造良好的开源技术氛围,培育和形成开源软件项目生态系统,为我国开源产业发展注入新活力。

deepin 团队此次获得了“首届中国优秀开源项目奖”二等奖。

deepin 作为国内唯一一支专注于 Linux 操作系

deepin 团队荣获首届中国优秀开源项目二等奖

深度科技 市场部 / 文

统研发与服务的社区团队,近年来累计发布版本 21次,发布自主研发的原创应用近 30 款,在国际开源第三方 Linux 发行版综合统计中排名多次进入前十。

截至目前,deepin 已经遍及全球 33 个国家,共有 105 个镜像服务站点,所有开源项目均托管在对外开放的深度代码托管平台中,同时为了方便全球范围内贡献者的协同开发,镜像都在国际主流代码托管平台 github 中。其中源代码约 2000 万行,代码注释 410 万行。以 Linux 内核代码数量为例,4.16.10 版本的 Linux 内核共有源代码约 1700 万行,代码注释约 330 万行,而深度科技开源的代码量和

Page 21: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin News

19www.deepin.com

代码注释量目前已经超过 Linux 内核。

deepin 团队在紧张的研发过程中,不仅开放源码回馈开源社区,也期待着更多国内优秀的工程师加入到 deepin 的开源建设中来。

借用 deepin 创始人的一句话:“deepin 能和国内其他优秀团队共同为开源做

贡献,既荣幸又骄傲!”

deepin 将不骄不躁,继续努力!

获奖名单如下:一等奖:Kata 社区:Kata ContainersApache ServiceComb 社 区 团 队:Apache

ServiceCombApache Dubbo 团队:Apache Dubbo

二等奖:PouchContainer 团队:PouchContainerApache RocketMQ 团队:RocketMQ华为 OpenSDS 开源团队:OpenSDSDeepin 团队:深度操作系统P3C 项目组:P3C

三等奖:PingCAP:TIDBShardingSphere 社区:ShardingSphere阿里巴巴集团:Sentinel腾讯 TARS 开源团队:Tars华 为 大 数 据 CarbonData 开 源 开 发 团 队:

CarbonData 开源百度 Apollo 团队:ApolloAuto尤雨溪:Vue蚂蚁金服:Ant Design

Page 22: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·春秋

20 2019.01

deepin 荣获 2018 年度最受欢迎中国开源软件 TOP20

深度科技 市场部 / 文

2018 年 11 月 12 日, 由 开 源 中 国 主 办, 蒲 公英协办的“2018 年度最受欢迎中国开源软件评选”活动正式上线。经过 21 天的投票决选,「2018 年度最受欢迎中国开源软件 TOP20 榜单」正式揭晓!deepin 最终在众多优秀软件项目中荣获第六名,是国内唯一上榜的操作系统产品。

在开源中国组织的四次“年度最受欢迎中国开源软件 TOP20”中,deepin 已经连续四次进入该榜单,通过历年榜单也不难看出,deepin 团队一直在不断进步。

2018 年:第 6 名2017 年:第 9 名2016 年:第 18 名2012 年:第 11 名

deepin 深度操作系统 项目介绍:

深度操作系统是国内最流行和活跃的 Linux 发行版本,是由深度科技自主开发的美观易用、安全可靠的操作系统。其桌面环境主要由桌面、启动器、任务栏、控制中心、窗口管理器等组成,系统中预

Page 23: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin News

21www.deepin.com

装了 WPS Office、搜狗输入法、有道词典、网易云音乐以及近 30 款深度原生应用。

深度科技团队非常注重友好的体验和美观的设计,因此对于大多数用户来说,既能在深度操作系统上体验到丰富多彩的娱乐生活,也可以很好的代替 Windows 系统满足日常工作需求。

目前,深度操作系统:·支持全球 30 多种语言·累计下载量已达 5000 万次

·多次进入全球关注度排行榜前 10 名·镜像站点遍及 6 大洲 33 个国家,共 105 个

近年来,深度科技与搜狗、WPS、网易等合作伙伴进行了多方位合作,共同打造国产操作系统生态。同时,我们还在努力解决迁移 Windows 平台软件带来的各种兼容性问题,以便用户平滑的过渡到开放安全的 Linux 平台上来。

在此,deepin 团队全体成员向广大支持我们的用户表示感谢,我们将更加努力,不负众望。

Page 24: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度人·在说

22 2019.01

Page 25: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Staff Corner

23www.deepin.com

为用户而设计

人们在使用计算机时都是带着一定的心智模型的,这些心智模型可能来自于生活、自然界,

也可能来自于别的场景或者操作系统等。一个好的产品设计要既要尊重用户的各种心智模型,也要充分了解用户的心智模型。作为设计师,我们应该为了用户(或者潜在用户)设计,而不是为自己设计,不可以站在上帝视角或者设计师惯性思维来思考产品设计,你的需求不代表就是用户的需求,你使用产品的方式也不一定就是别人使用产品的方式。

只有在设计过程中时时站在用户的角度去考虑,才能做出最符合用户需求的产品。如果你知道目标用户群体是谁,并充分了解他们的情况和需求,能够体会他们在使用中遇到的痛点,并全力的为他们思考和解决问题, 那么你距离好的产品设计就更进一步了。

设计解决的不仅是视觉问题如果一个产品只是为了做的好看、漂亮,而忽

略了用户真正的需求,将产品真正该做的重点做偏了,那只能是个花瓶,空有其表。如果设计只是一味堆控件,丝毫不考虑用户在使用过程中的体验和感受,那一定会被众多优秀的产品击败。就像某知

名桌面 OS 那样,仅仅凭借先入为主的堆砌控件的产品设计,就想同时占领手机 OS 市场,但不顾用户体验的他们,完全无力与 IOS/Android 等优秀产品竞争,很快便败下阵来。

设计的美观,会通过视觉传达让用户的内心十分舒适,而操作变得更加简单易用,则是解决了用户使用需求,这才是关键。想一想,鸟儿为了飞翔,骨头必须要变成中空,鲸鱼为了能在海里遨游,四肢必须变成鱼鳍,自然界里的各种生物,形形色色,它们的 DNA 为了让它们能不断繁衍下去而不断改进着它们自身的设计,虽然它们设计的意义在于生存,但是从不做无用的进化,千万年来,它们每一次改进,都是有它们的意义。

UI 设计并非堆控件,解决了用户的需求,你的UI 才有意义。

交互里的加法和减法交互里的加法

在很久之前,大家要想吃青菜怎么解决:买好种子种好、浇水、施肥、然后等待发芽成长、采摘、回来清洗、然后烹调,再完成吃这一步。现在我们

深度科技 资深设计师 舒乐

Page 26: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度人·在说

24 2019.01

想吃青菜可以直接去菜市场或超市买好,回来炒好就可以开始吃了,听起来好像是步骤减少了,但是前面这些过程只是在我们购买的这个环节少掉了而已,它并没有真正减少,步骤一直都是那么多,只是将这些步骤的复杂性转移给商家以及供货商了。在这里我们就是用户,商家和供货商便是提供产品的人了。

程序里的代码从来都不是简单的。用户一个简单的操作,可能就需要写大量的代码才能实现。每个用户需求的功能不尽相同,有人喜欢吃萝卜,有人喜欢吃白菜,无论在产品开发的过程中还是用户和产品之间的交互过程,复杂度其实一直都存在,只是这个复杂度往那边偏了。

我们要做的就是合理规划产品的复杂度,达到一个平衡状态,既不能让产品开发环节太过于复杂以至于很难完成,也不能让开发过于简陋以至于用户用起来漏洞百出,所以我们在做产品的时候就需要为用户考虑和做的更多,当我们为用户考虑的更多的时候,用户才需要考虑的更少,好的产品都是充满人文关怀的,精致和细腻的,你的每一种可能性它都提前预知到了,并且有对策来应对,这也就是大家理解的机器变的越来越智能。其实将复杂操作转移给系统,就是让机器变得更智能,这是科技发展以来人们一直在做的一件事。无论是记录用户

名和密码、自动识别用户 IP 所在的城市、输入框的自动补全等常见的交互设计细节、特斯拉的自动驾驶技术等,都是增加了工程师和设计师的工作量,将复杂转移给系统,来让软件变得更加简单好用,让数以万计的用户减少额外的付出。

设计师在做设计的时候要尽可能的考虑的更多,前期需要做大量的加法工作,这是一个重要且必不可少的步骤。在产品的最初环节中,设计师和产品经理考虑的更多才能从中剔除一些不必要的内容,再进行一些减法的工作之后,一个产品才会变得愈加完善。好的交互其实就是将复杂的操作主动转移到上游来的过程。

交互里的减法在产品的最初阶段,设计师和产品经理做完加

法工作之后的环节就要开始做减法了。席克定律:一个人面临的选择(n)越多,所需

要作出决定的时间(T)就越长。转换成我们听得懂的语言就是:当选项增加时,

我们做决定的时间就会相应增加。席克定律对我们设计上的启示:产品的结构尽

量简洁明了,把与做决定有关的选项减到最少,以减少所需的反应时间,降低犯错的概率;也可以对选项进行同类分组和多层级分布,这样用户使用的效率会更高,时间会更短。

设计师在做减法时请关注几个减法点:减少内容、减少步骤、减少选择、减少操作难度(比如移动距离,点击范围等)。

学会删除,少即是多。让产品保持核心功能就足够,可有可无的一定可以无,产品正式发布之后,通过收集用户反馈情况进行分析,可以发现,并非产品的所有功能都是用户所期望的,在这种情况下要学会放弃,果断放弃使用频率低、用户厌烦的功能。

Page 27: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Staff Corner

25www.deepin.com

比如 deepin 的安装器,从最开始的选语言、创建用户、选磁盘、开始安装,四步就可以完成了,对于更高级需要自定义的用户可以按照他们的需求来做更改,但是对普通用户而言,四步足够了,而其他一般的操作系统或者发行版会经历:选语言、选键盘布局、选时区、选择安装磁盘、创建用户、,选择网络、选择更新等至少 7 步甚至更多,对用户来说,操作步骤越多,应用的复杂度越高,挫败感也会越高。

deepin 一直秉持着这种理念做产品设计,无论是安装器还是其他应用,将多余的步骤砍掉,只为了将用户的体验做到最好。

保持轻量化功能轻量化

我们是为普通用户而设计,而不是专家型用户。专家型用户想要的可能是一个可以驾驶的飞机,而普通用户想要的也许仅仅是一个玩具飞机而已。我期望每个人都是专家型用户,因为无论是从专业知识的角度还是探索精神上来讲他们都更优于普通用户,但之所以要忽略专家型用户是因为这类用户永远都只占少数,而且也不能期望用户从一个普通用户变成专家,不是没这种可能性,而是多数用户只是在用某部分功能而已,缺乏探索精神和学习动力,从一个普通用户变成专家型用户的可能性太低。无论是商业软件还是开源软件,用户无论为软件买单与否,基本上想要的都仅仅是刚好够用的功能,不多也不少。功能一旦过多,必然会分散对主要功能的注意力,每个功能之间查找起来会变得更加困难,难度并不是随着功能增加的求和,而是指数上升。

没人喜欢复杂的事物,即使是专家型用户,所以就算是专业类的软件也应该做的尽量简单易用,简单是一个永恒的主题。很简单一个例子就是以前

的电视遥控器大概有几十个按钮,而现在很多的遥控器的按钮数量减少了很多,但是功能并没有比以前的变得更少。曾经红极一时被称为 20 世纪最伟大发明的十大电子产品之一的 Flip 摄像机就是一个很好的用户喜欢简单事物的例子,无需数据线,无需驱动,没有复杂的参数设置,就一个大大的红色录像按钮,任何人都能使用。

做产品设计时,产品的需求一定要在开始做加法的基础上一而再,再而三的做减法,直至最后减得无法再减了,保留下来的才是核心功能,保留了为数不多的功能之后产品的体验才会变得更加纯粹。

记住一条准则:可有可无的一定可以无。

几年前的深度音乐和深度影院,包含了很多很多的功能,很多功能基本上是大多数用户根本不用或者很少用的功能。其实,我们今天依然有能力把每一款 deepin 应用都做成功能最丰富且最强大的软件,但是这真的是用户想要的吗?每增加一个新

Page 28: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度人·在说

26 2019.01

的功能就会额外增加用户的使用负担和操作复杂度,也会让应用出错的概率变得更高,且增加应用的臃肿程度甚至启动速度,这一切都是增加功能带来的副作用。这必须要在用户长时间的使用、反馈及探索中,才能得知用户正真的需要是什么, 现阶段所有 deepin 应用都是在满足用户的基本需求的同时尽可能的保持足够的轻量化。

视觉轻量化无论是操作系统还是应用软件,随着自身版本

的迭代,功能不可避免的逐渐发生变化,很大部分概率是功能会越来越多,增加的功能越来越多必然会分散用户的注意力,也会增加使用的难度和心理负担,为了减少这种心理压力,除了要尽量保持功能轻量化之外还要从视觉上保持轻量,以此来让用户在使用操作系统和软件时能更轻易地接受和使用。

我已经提到过很多次用户是按照一定的心智模型在使用操作系统和软件,有着他们自己的情感和心理活动。想想自己去一家旅馆住宿,进门后四周都是墙,没有窗户,虽然有空调给房间的空气换气,但是我们肯定还是觉得闷,不透气。现在流行的扁平化讲究的就是视觉轻量化,从曾经的拟物化一度变化过来,去掉了多余的装饰,让用户的注意力从

纯粹的视觉效果上转移到内容上来,强调内容至上。

视觉轻量化可以从几个方面来实现:1. 淡化窗口投影,减少窗口之间的层次感。2. 整体配色,浅色给人轻,深色给人重的感觉。3. 强调整体性和穿透性,比如任务栏背景和桌

面的融合,控制中心和桌面的融合等。

deepin 的任务栏,控制中心以及所有这类带模糊效果的系统组件,以及像文件管理器这些应用内不同的部分,比如顶部工具栏和侧边栏以及和右边内容视图这几部分,它们实际上在一个应用窗口内将窗口产生了分割,但是它们之间微弱的对比消除了视觉的琐碎感,让这一个应用看起来还是完整的一个整体;这些都是为了让用户的视觉看起来是完整和轻量的,不会产生压抑和沉重的感觉。

帮用户偷懒减少鼠标移动距离

现实生活中,我们希望走最少的路就可以把事情办完,比如新房装修,我们在城市的一边买完了瓷砖,不会想跑到城市的另外一边去买乳胶漆吧,这样实在太折腾也太累了。不知道大家平时在用手机时发现没有,无论是 IOS 或者安卓的各种应用,它们的主要操作都是大拇指所能轻易转动的这 90 度范围内,且不需要挪动别的手指, 比如后退按钮,放在左上角,这些都是很方便的操作,但是如果是一个小手的用户拿着一个大手机,就明显用起来就非常不方便了,因为他 / 她需要移动大段的距离才能使手指够得着想要的操作。在桌面操作上也是一样,虽然不必要用手指指着屏幕一个个去点击,但是也需要挪动鼠标去操作, 距离大了自然也就不方便,无论在时间的消耗或者准确性上都会降低用户的体验。

Page 29: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Staff Corner

27www.deepin.com

所以,尽可能的减少用户鼠标的移动距离,如果可以,尽量保持原位置不变,避免需要反复调整鼠标位置。比如文件管理器的关闭标签功能,有 5个标签,关闭其中一个,下一个标签自动挪过来了,并且鼠标还是在挪过来的标签关闭按钮上方,用户可以快速的关闭剩下的标签,直到鼠标离开关闭按钮后剩下的标签才会平分整个宽度。还有一个例子就是文件你管理器选中多个文件按空格键进行预览的时候,在不同的文件之间切换,这个预览窗口的左下角始终保持原坐标不变,剩下的部分根据不同文件进行放大缩小窗口,缩放的中心点始终是左下角,是因为左下角有上一个下一个按钮,用户鼠标放在这里可以快速切换上一个下一个文件,如果预览窗口始终放在屏幕中央,那么上一个下一个按钮的位置永远都不是固定的, 用户需要频繁的挪动鼠标来定位到这两个按钮上面,点一次挪动一次鼠标,实在是反人类。

减少点击次数在之前的简化使用步骤中提到过一个原则,需

要用户点击的次数越少越好,只需要用户点一下的就不要让用户点两下,只需要用户两步就能完成的用户任务就不要分三步。

减少用户点击次数的原因有两个:1. 点多了累。2. 点多了容易出错。

第一点不必多解释,大家自然能理解。第二点,交互设计里有个说法叫“7±2 法则”,

人类头脑最好的状态能记忆含有 7(±2)项信息块,在记忆了 5-9 项信息后人类的头脑就开始出错。假如你的短时记忆像一般人那样 , 你可能会回忆出 5~9个单位 , 即 7±2 个,这个有趣的现象就是神奇的

7±2 效应。这个规律最早是在 19 世纪中叶 , 由爱尔兰哲学家威廉汉密尔顿观察到的。他发现,如果将一把子弹撒在地板上,人们很难一下子观察到超过7 颗子弹。

如果用的步骤太多,用户很难将所有步骤过程都记得很清楚,可能需要时不时会退到上一步查看上一步的内容,然后来回折腾,记得的内容变少了,出错的概率自然就增多了。

减少用户思考最好的操作就是在用户下意识或者说在不知不

觉中就完成了的,如果用户产生了犹豫,迟迟不肯点击或者点错的概率很高,那我们应该好好思考一下我们的设计问题了。

减少用户思考只是为了降低操作和学习的难度,并非将用户当成傻子对待。用户需要操心的越多,说明应用开发阶段设计师和产品经理思考的太少。用户思考的越少,那说明这个应用越简单,体验自然也会越好。如果用户需要拿着说明书仔细阅读,有时候看一遍还不够还要看好几遍才能理解,甚至还需要上网查相关的知识,这种就说明交互或文案太复杂,用户不理解,体验是很糟糕的。所以一个系统或应用说的帮助手册写的再怎么好再怎么好看,都不如将交互做的最简化来的直接。

deepin,为用户而设计作为 deepin 的一名设计师,我们始终站在普通

用户的角度而设计,相信,随着 deepin 不断地版本迭代,我们将会为用户呈现一次又一次的惊喜,并将一直以美观易用为目标而努力。

Page 30: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

行业 · 观察

28 2019.01

网信领域的国产化很可能“先进替代落后”◎ 观察者网网

2019 年 2 月 23 日,中国工程院院士倪光南在观学院做“中国网信领域的创新机遇”主题演讲,围绕着国产化能不能替代 GPS、Wintel、IOE 等话题,倪光南表示,中国网信领域的未来很可能实现“国产替代进口”,且是“先进替代落后”。以下为观学院整理的演讲全文。

各位嘉宾上午好。我今天的主讲题目是“中国网新领域的创新机遇”。

今天主要讲三个方面,第一,新一代信息技术;第二,国产自主可控替代;第三,开源软件 / 芯片。

第一部分,目前在世界上,中国应该是最重视人工智能、大数据这些信息技术的国家。最近特朗普也开始学我们,要重视人工智能。我们国家看到了新一代信息技术的发展带来的良好机遇,所以会制定下一代人工智能的规划,大数据战略等。还有,全世界中国在 5G 方面的部署,应该是最前的,做的最多的,这部分大家都有所了解,我就不多讲了。

国产自主可控替代产品的意义国产自主可控替代这个名词是从哪来的?习总

书记在关于网信工作的系列讲话中,不止一次地强调过“要加快推进国产自主可控替代计划,构建安全可控的信息技术体系”。在座各位不一定是搞网信工作的,所以我得解释一下,“网信”就是网络

安全和信息化,这个词我也不知道要怎么翻译,这应该是习总书记的一个创新。

在全世界范围内,“信息化”这个词大家都熟,也有“网络安全”这个提法,但是首先把二者结合在一起的是中国。习总书记在十八届二中全会成立了网络安全和信息化领导小组,他亲自担任组长,现在叫网络安全信息化委员会。

按照习总书记关于网络安全和信息化方面的系列讲话,他把这两方面作为一个整体,称之为“一体之两翼、驱动之双轮”,同步发展。所以按照这个思想,我们国家是一个机构管理网络安全和信息化,最高组织就是习总书记领导的网络安全信息化委员会,下面各个地方有相应的网信办机构开展具体工作。其中对网络安全信息化的重要指示,我们就叫网信工作讲话。

在传统消费领域,比如说我们买汽车,可以买到国产的,也可以买到进口的。国产汽车做出来就能进到市场,有时候是因为它做得好看,然而有时候它做得不那么好看,但是很便宜或者很皮实,或者有一些特殊功能。总的来说,国产产品进入市场,还是主要依靠性价比。

但是网信工作不一样,有时候讲性价价比没用。我给大家举个例子,在座的各位有很多用的是国产

Page 31: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Industry Events

29www.deepin.com

手机,从操作系统来讲,这类手机叫安卓手机,而安卓系统是美国谷歌公司搞的。另外有些人喜欢用贵一点的苹果手机,因为它出来的时间比较早,设计也很漂亮。不光是中国,全世界几十亿不到一百亿部的手机也无外乎这两大类。还有第三类吗?基本上看不见。

微 软 公 司 在 电 脑 领 域 很 有 名 气, 大 家 都 用windows 操作系统,但是它换到手机就不灵了,因为市场上没人用。

在座的各位都有很多生活经验,你们能举出哪个领域里产品很多,却只有两种类型吗?

我们的手机产品那么多,但是就两家能够垄断,这个垄断性不是我们一般产品能够达到的。这就是网信领域的特点,所以在网信领域,国产能够占得住,讲性价比最高没用,因为在被垄断情况下,性价比看不出来了。

国产产品要想进入市场,如果不打破垄断,根本看不见,性价比再好也没用。所以习总书记提出要做国产自主可控替代,就是国产的自主可控的产品进入市场要有替代能力,替代谁呢?替代垄断的外国产品。这是我们当前所处的历史阶段,就是要从跟跑、并跑进一步到领跑阶段。

在今后相当长的时间里,中国的网信领域会有一种新常态,就是国产的自主创新的软件、硬件要替代目前处于垄断地位的外国产品。这个替代过程短则三五年,也有可能十多年,甚至几十年。但是我们必须坚持这么做,因为中兴事件的例子说明,如果不是自主可控的产品,我们的产业人家可能在一天之内就被搞瘫痪掉。

那么国产自主可控替代现在有人在做吗?在做,最好的例子就是北斗卫星导航系统。

在信息社会我们都离不开卫星导航系统,它已经融入到了很多业务之中,像手机上的地图导航,天气预报的城市定位等。现在很多人都在做卫星导航,但是人们用的最多的就是 GPS,这是美国率先在全世界推出来的一个系统,也很先进。

各个国家都认识到卫星导航系统很重要,用美国人的系统不太好。后来,欧洲搞了一个伽利略系统,俄罗斯搞了一个格洛纳斯系统。

美国把 GPS 开放给大家用,也是把指标降低了的,精度为十米左右,定位误差在十米左右。而美国自己用的精度不到一米,军用的可能更高。

我们的领导人很早就做了决策要做自己的导航,因为这个系统太重要了。过去我们发射导弹也用 GPS 定位,结果发现在演习中不灵了,因为人家开放给你,可以开也可以关,他知道你在演习就把信号关掉,结果我们的导弹就不知道打到哪儿去了,甚至可能给你错误信息,那你都不知道实际上打了谁。

经过这些教训以后,我们就做出了北斗卫星导

Page 32: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

行业 · 观察

30 2019.01

航系统,做到现在已经 20 年左右,很成功。现在北斗已经可以替代 GPS。

我们现在的手机定位信息,有可能用 GPS,也有可能用北斗,但是今后肯定基本上都用北斗。再有在自动驾驶、无人驾驶领域,北斗一定是首选,为什么?因为它对精度要求很高。我们的北斗系统目前好的能够达到厘米的精度,差一点的也能达到分米精度。这个精度从十米变到一米之内,再变到分米、厘米,你想想这是多大的提高。

自动驾驶、无人驾驶这种技术能够推广,必须依靠北斗,靠不了 GPS,因为 GPS 可能会把信号关掉或者给你错误的信号。现在我们国家正在大力推广用北斗做导航定位,在这种系统支持下,我相信不久以后,我们就可以把自动驾驶、无人驾驶技术真正推向实际应用。

我刚才提过的欧洲的伽利略系统、俄罗斯的格洛纳斯系统都不如我们的北斗系统。我们预定在2020 年,可能提前向全世界开放我们的北斗的应用。北斗的例子说明国产自主可控的技术和产品是有可能替代现在处于垄断地位的进口技术和产品。

国产自主可控替代的尝试下面我再简单给大家讲一些正在进行的一些国产

自主可控替代的尝试。这些替代正在进行,我们希望快点几年,慢点一二十年能够达到效果,最终能够把一些重要领域的一些核心技术用国产的替代掉。

这种替代不仅是出于安全的需要,也有性价比方面的需要。现在我们发现只要是国产能够做出来的产品,一般来讲性价比在世界上都是很好的。像平衡车,美国人做出来十多万一个,我们北航出来的一些人开公司,做出来的产品只有几千块钱,小

孩就拿着在小区里玩,变成玩具了,这是中国人的能力。

国产的桌面计算机体系对 Wintel 体系的替代Wintel 这 个 词 是 由 两 部 分 组 成 的, 微 软 的

Windows 和 Intel 架构 CPU。基本上全世界的电脑,台式的、一体机、笔记本电脑都是 Wintel 一统天下,占全世界电脑份额的 90% 以上,在中国大概是 95% 以上,可见网信产品的垄断情况非常强。

我们的任务就是用国产的机器替代它。其实,像这么复杂的操作系统和 CPU 都是有后门的,什么叫后门?就是厂商可以通过一些你不知道的途径来控制你,取得你的信息。

因为那么复杂的技术,他自己要经过很多测试、诊断,在你电脑工作的时候,人家要知道你用的是不是正版,还要告诉你什么时候升级等。所以他们必然有一些用户不知道的途径来控制计算机,从安全的角度来讲,这当然是很大的问题。此外,价格也很贵,所以我们希望用国产的机器来替代它。

那么,我们用什么来替代 Wintel ?就是用国产Linux 操作系统加上 3 种国产 CPU(申威 / 飞腾 / 龙芯)组成我们自己的体系。目前,我们一些重要的部门已经首先开启了这个替代过程。我们希望若干年以后,在座的各位也能用上国产架构的电脑,这个过程需要一点时间,但是我们必须做,因为这牵涉到中国的计算机安全,也牵涉到整个产业的发展。

工信部作为主管部门会对国产替代产品进行评估。网信领域国产软硬件的发展过程一般要经历“不可用”——“可用”——“好用”三个阶段。

十多年前,我们做出来的国产电脑一开始还是

Page 33: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Industry Events

31www.deepin.com

“不可用”阶段,开机太慢,等你喝杯咖啡、泡杯茶还没开起来。但是现在我们已经过了“可用”阶段,并且向“好用”发展。现在我们的国产水平比国外的 Wintel 还差一点,但是差的不那么多了。

举个例子,这是我国航天科工集团他们工作所用的一个网,叫商密网,它采取云服务模式,其数据中心和终端全部基本实现国产化。这个网它有很多指标,比如登陆、打开文件、查询文件等每一个动作按照有关方面要求都应该在两秒之内完成,目前我们测试结果基本上都是一秒之内。这些成绩给了我们很大的信心。

像 Wintel 统治世界应该有 25 年以上的历史了,我们相信不久国产电脑能够逐步打破这种垄断。

高端数据库服务器对“IOE”的替代在大数据时代、云计算时代,计算能力主要靠

的是数据中心。包括中国在内的大量重要的数据中心都由“IOE”这三家外国公司提供:IBM、Oracle、EMC。比如说各大银行、金融系统的装备、硬件、软件都是它们提供的,这些数据也是靠它们来运作加工,这就存在很大的安全问题,而且它还很贵。

为什么非要用它们呢?因为对于银行来说,任何一笔交易都是不能出错的,所以对数据中心的要求非常高。不仅中国,全世界重要的银行系统、金融系统、能源系统、通信系统以及一些政府部门的一些重大的数据中心也都是这三家公司的产品。

做这个替代很难,很多人说做不了。我们把国产的数据库服务器和国外的做了一个比较,详细的我就不多讲了,不妨直接看最后的测试结果。

图中有不同档次的服务器,红色是国产的,蓝色是进口的。从性能指标上看,哪个好?很多人都

没想到,居然是国产的要好,每个档次都强一点。这是去年的测试结果,用的是国际上对数据库服

务器性能评估的一套标准。

自主可控网络通信协议对传统网络技术的替代互联网非常重要,也已经跟我们的经济生活紧

密融合在一起了。从美国人发明互联网到现在应该有 50 年的历史了,它以后又会如何发展呢?大家知道 5G 现在很火,等 5G 来了带宽会特别宽,到时候高清图像、虚拟现实等各种各样的新需求都会出来,这对我们网络的要求就很高。

我相信随着 5G 的发展,网络的带宽还会不断提高,互联网相当于视频信息传输的一个主干道,网络必须满足高清晰的、高质量的视频传输要求。当然还有安全的要求,比如说网络攻击,这些大家都能体会到。

那么能不能解决这些网络新要求?在这方面我们国产技术怎么样?很高兴看到我们中国人有自己的网络——视联网。它可以保证高清视频无障碍传输,以及实时控制几千公里之外的高清摄像头,而且没有任何延迟,也能够通过这项技术开远程视频会议等等。

国产工控实时操作系统 SylixOS 对 VxWorks 的

Page 34: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

行业 · 观察

32 2019.01

替代现在各地正在积极推行物联网和工业互联网,

就是把过去分散的工厂的制造通过网络连在一起,做到人互联、物互联,最后万物互联。举个例子,一个产品制造可能不是一家工厂做的,而是连在网上的很多工厂一起制造。包括一些公司如果远程发现它的产品有问题,发生了故障,都能及时进行修理或者更换部件。所以工业互联网、物联网对工业控制有很大的要求。

单台机床叫数控机床,如果和很多机器人、智能控制加在一起,那么这个智能工厂就和过去完全不一样,其中一项核心技术就是实时操作系统,这在工业控制智能制造领域非常重要。

在这方面,大家用美国的 VxWorks 系统比较多。但是因为没有控制权,很容易出现安全问题。一旦出现安全问题,危害性会很大。

我可以举几个例子。一是伊朗,它要发展自己的核产业,买了很多离心机来分离核原料。这个离心机很好,但是有人用震网病毒入侵以后,这些系统就管不住了,离心机是高速旋转的,一旦失控超速,离心机垮了。

还有一个例子,前几年乌克兰停电,不是因为它的电厂有问题,而是控制系统被病毒攻击以后失控了,结果整个电网瘫痪了,这对整个乌克兰都造成了很大的影响。

所以为了解决这些安全隐患,我们希望用国产自主可控的操作系统,好在目前我们已经有国产的可以替代了。那么怎么看到底是不是国产的呢?你说这个系统是自己写的,也有可能是抄来的。我们

从全世界收集了很多代码,我们可以通过扫描你的代码来进行分辨,目前国产 SylixOS 系统的代码基本上都是自主开发的。

以上这些例子说明,习总书记要求推进国产自主可控的替代计划是我们建设网络强国必由之路。如果不强调国产替代,我们就不可能把垄断市场的外国的产品拿掉,国产进入市场就是不可能的。

我们要通过一定的替代计划,逐步加强我们国产技术和产品的地位。北斗的例子已经表明我们目前已经可以做得相当好,还有其他一些替代也正在逐步推进。这里我要强调一下,不是像有些人说的国产自主可控替代是落后替代先进,总的来说应该是先进替代落后。

我还要讲一下为什么要自主可控?自主可控是习总书记关于网信工作的一个很重要的指示,他讲道没有网络安全就没有国家安全,其中也讲到自主可控替代。网络安全有它的特殊性,除了传统安全的要求,还有一个可控的要求。可控性是个新概念,像黑客控制、网络攻击造成的问题就属于这个范围的。

那么如果有人说我这个产品是可控的,你会相信吗?得有一些标准。中兴事件以后,我们有关方面就开始提倡加进自主可控的标准,要有专门机构去评估。

华为很重视自主可控,早在 2012 年,华为创始人任正非就“已没有生态空间,为何还做终端操作系统”时说,应尽量使用国外的好东西,包括高端芯片和操作系统,但要有战略备份。企业要向华为学习,必要时要有备份系统顶上去。尽量减少或

Page 35: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Industry Events

33www.deepin.com

避免出现中兴事件。

开源芯片芯片非常重要,相当于信息产品的心脏,而

操作系统是灵魂,一个软件一个硬件都是关键的核心技术。经验告诉我们,这些关键的核心技术是要不来讨不来买不来的,所以这些技术我们一定要掌握。

现在为了加速芯片事业的创新,我们对开源芯片这个新的潮流也很重视,三个月前,我们在乌镇的第五届世界互联网大会上,成立了一个联盟——中国开放指 令生态(RISC-V)。这个联盟就是要推广开源芯片。

大家都知道开源软件,软件用开源的形式取得了很大的成功。现在互联网服务商基本上都是基于开源软件这个平台,像 Linux 的操作系统平台、BAT。

开源芯片也会带来这样的好处。刚才我提过我们国产的三种芯片,但是在世界市场上的 CPU 中央处理器这种高端芯片,能够站得住的就两大类:Intel 架构(x86)CPU 和 ARM 架构 CPU。它们的芯片很好,性能很强,生态比较成熟。我们中国有很多公司都在用,华为的海思芯片,还有高通芯片都是这类架构。

但是它有什么缺点?要钱。如果要向它们够买知识产权,这里面有不同等级,终身使用的架构授权大概几个亿,像华为出资大概就有几个亿,稍微小一点的公司可能会花几百万买到一个黑盒子,就是它给你做好了,你可以用,但内部不告诉你,你也不能修改。

我们国家提倡大众创新,万众创业,那么大量

中小企业和创新团队能用得起吗?对不起,还没有资格,太贵了。一般公司花几百万,几十个人,大概几年能做一个芯片。但我们双创企业以中小为主,而且公司创新主要靠软件。

我们希望中国将来能用到开源的芯片,几个人,免费下载一些代码,几个月就能做出一个芯片,基本不太花钱。我们希望通过开源软件、开源芯片,可以两条腿走路,应用创新和软件创新一起来做。

我们中国的科技人员世界最多,人才资源世界第一,市场应用世界第一,再加上我们希望通过RISC-V 把开源芯片这种技术资源更好推广出去,利用这些优势,我们能把芯片事业更好地发展起来。将来这类架构芯片和 x86、ARM,在全世界是不是也可能成为三驾马车?三分天下有其一也是我们所愿意看到的局面。

最后,今天希望给大家传达的信息是,在网信领域我们要通过创新,争取使中国能够实现从跟跑到并跑,再到领跑的发展,最终目标实现网络强国,这是我们和在座各位在这个领域共同的责任。谢谢大家!

文章转载至观察者网,原标题:观学院 2019年倪光南演讲:网信领域的国产化很可能“先进替代落后”。

Page 36: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·策划

34 2019.01

3 月 1 日,深度首届软件开发大赛正式启动,此次大赛的目的是为完善深度操作系统和国产芯片(CPU)下的软件生态,让更多企业、开发者、在校师生了解和参与到基于国产芯片的软件开发中。

本次大赛在中国电子工业标准化技术协会安全可靠工作委员会、中国智能终端操作系统联盟的支持和指导下,联合国内优秀的软硬件厂商龙芯中科、华为、成都申威等共同举办,本次大赛也将邀请全国高校及开源组织共同参与 , 将向全球的开发者征集原创软件作品,丰富国产软件生态。

大赛得到了国产芯片厂商的大力支持,并为参赛团队准备了基于龙芯、申威平台的终端硬件开发环境,以开发桌面软件;同时还准备了基于华为 Hi16xx 的服务器硬件开发环境,以便于开发服务端软件。参赛团队可以率先体验和使用国产桌面终端和国产服务器整机,成为国产平台软件开发的先锋。

作品提交方式参赛者 / 团队(选派指定组长对接)需在大赛

官网提交参赛材料:1. 个人 / 团队组长个人信息、作品介绍、原

创承诺书、软件功能文档(描述软件的主要功能与使用方法,不少于 1000 字)。

2. 开源软件需提交 github 账号上的作品链接;非开源作品需提交软件的下载地址。

3. 建议桌面应用软件使用龙芯、申威平台,服务器应用使用华为海思,便于主办方提供硬件及环境支持。

Page 37: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Contributions

35www.deepin.com

1

2

4

3

5

作品征集阶段2019 年 3 月 1 日 -6 月 1 日征集不限运行平台的优秀国产原创软件。

作品初选阶段2019 年 6 月 1 日 -7 月 1 日主办方及其他评委线上选出通过初赛的作品,并于 7 月 1 日前公布初赛结果。

国产软硬平台支持阶段2019 年 7 月 1 日 -9 月 1 日主办方与通过初赛的参赛者签订设备借用协议,并提供国产平台计算机进行软件迁移工作。

通过初赛作品的终审2019 年 9 月 1 日 -10 月 1 日通过初赛作品的参赛者演示及讲解作品,主办方将邀请相关领导及专家学者参与终审。

颁奖阶段2019 年 10 月 -11 月主办方将在第 9 届深度开发者与用户大会现场评出 最终奖项并颁奖。

Page 38: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·策划

36 2019.01

作品要求1. 参赛作品不允许出现侵犯他人知识产权的

内容,参赛过程不允许出现违反国家法律规范的相关行为。

2. 参 赛 作 品 应 在 深 度 操 作 系 统 V15.9 或V15.10 版本上编译生成,并可稳定运行。

a. 开源项目:· 代 码 托 管 在 github 上, 比 赛 用 分 支 为

master。· 采 用 主 流 开 源 协 议, 如 GPL、MIT、BSD、

Mozilla、LGPL 等。·开发语言限定推荐 C/C++,python,java 等

多平台兼容性好的开发语言或工具;Golang 等其他开发语言不做限制。

·可基于开源项目研发,但自行开发代码超过50%,自行开发的代码行数不低于 2000 行。

·github 源码仓库根目录下建立 deepin_os_match2019 文件,代表该项目参与本次竞赛。

b.非开源项目:必须为自主开发的软件,并提交作品下载地址。3. 获奖作品将上架至深度商店,署作者或团队

名称。

评分标准1. 必须符合上述所有要求2. 软件功能:453. 软件非功能性特性:25 3.a. 创新性 3.b. 稳定性 3.c. 性能 3.d. UI/UE4. 该软件的界面是否主要使用了深度的 DTK

图形库:5. 若是开源项目:主要检查项目持续活跃度与

项目规模,以及基本的模块划分、代码风格与文档注释:10,非开源项目不获得此项分数。

6. 支持国产平台:15,每支持一个国产芯片平台得 5 分。

武汉深之度科技有限公司(简称:深度科技)成 立 于 2011 年, 是 专 注 基 于 Linux 的 国 产 操 作系统研发与服务的商业公司。作为国产操作系统生态的打造者,不但与各芯片、整机、中间件、数据库等厂商结成了紧密合作关系,还与 360、金山、网易、搜狗等企业联合开发了多款符合中国用户需求的应用软件。深度科技的操作系统产品,已通过了公安部安全操作系统认证、工信部国产操作系统适配认证、入围国管局中央集中采购名录,并在国内党政军、金融、运营商、教育等客户中得到了广泛应用。

深度操作系统是由中国研发团队主导开发的一款基于 Linux 的操作系统软件,经过十多年的技术沉淀和版本迭代,产品已日趋完善,并在国内外引起了广泛的关注。深度操作系统目前已支持 33 种语言,拥有 7 个海外用户社区,全球用户过百万。

大赛官网:https://www.deepin.org/devcon-2019

Page 39: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Contributions

37www.deepin.com

Page 40: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

38 2019.01

论坛 百科 博客 用户反馈 镜像源

深度社区

原贴请登录 www.deepin.org 深度社区查看

体验过几款流行的 linux 发行版之后,我发现,deepin 才是最适合国内用户入门的发行版

先声明,我指的是最适合入门的发行版,老司机轻喷。

下面说理由:

我们说 linux 相对于 win 和 mac 对于用户的要求更高一般原因有下:

一: 非图形界面操作,也就是命令行(终端)的操作难度略高。

deepin 是怎么解决的,第一,图形化应用商店(现在大部分发行版都是这么搞的,比如 manjaro,ubuntu,其他,

虽然都是 de 带的),但 deepin 更妙的是在商店中添加了评论区,虽然有些软件源很旧,但你或许就能在评论中找

到答案,用户体验上来了。第二,常用软件尽量预装,这一步也帮小白省去了不少闹心的操作,虽然一些其他优秀

的发行版也是这么做的,但 deepin 更了解国人的需求,举例:deepin 预装搜狗输入法,wps,其他发行版需要自

己安装搜狗,且预装的很可能是 libre offi 或其他,第三,汉化终端命令注释,也许你一开始并不熟悉 shell 命令,

但没关系,没有谁上来就会的,不懂就 help 早晚得会,在这点上除了 manjaro 做的还可以其他的多少都差点。

二:折腾人的显卡驱动。

显卡驱动的安装在其他发行版上也存在一些问题,比如难安装,通常我们都需要百度当前发行版驱动安装教程,然

后按步骤敲命令或者复制命令来安装,且安装后非常不好更换方案,deepin 的驱动程序就做的很好,首先易安装,

选择方案确定重启就好,且安装过程中有测试程序来告诉你这方案是否运行的很好,其他发行版我反正没见过有这

东西。再一个就是易更换,更不用说了,其他的发行版需要敲命令先卸载之前安装的方案,再安装新的,且不一定

会成功。deepin 驱动程序帮我们封装好了这些过程,对于刚入门的小白来说用户体验就很舒服。

三:其他小问题。

诸如软件和镜像要换源此类小问题,当然这也是没办法的事情,不能算问题的问题吧。感觉对于一般用户来说,

deepin 已经做的够好了,虽然也有一些不足之处,但绝对值得期待。

最重要的兼容 win 程序的方案,可以说业界良心

youhohoho / 2019-1-7 22:45

ljq050511 发表于 2019-1-7 23:12:57

我也是用过不同的 linux 发行版,体验最好的就是 deepin。

deshitong 发表于 2019-1-8 08:09:23

deepin 现在确实很好了,我就是家用,两台电脑都是 deepin 单系统,用了很久了,开始遇到了一点问题,主要是不懂,

现在一切良好。

cg281312960 发表于 发表于 2019-1-8 06:48:19

+1,很好用的系统。

hepec_lzq 发表于 2019-1-8 08:59:34

我现在办公用装的就是 deepin,笔记本也是 deepin,而且都是单系统,没有 win。用着不错,能满足我的日常需要。

Page 41: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

39www.deepin.com

深度你还缺啥?

1、 流畅,稳定的系统有了![几乎没见到英文,汉化最好,速度快多了,好用]

2、上网:高效舒畅地浏览网页,有 chrome,firefox,可启动,还很好用,速度还快!

3、办公:有 wps office,永中 office,其它的办公软件可有可无!!

4、绘图:三维、平面,printa,krita,blender,gimp,lnkscape,看图的就不说了,xnview 值得一提!

5、音乐:网易云音乐,歌多还全。[其它的杂牌,汉化不全,不喜欢工作只做一半的]

6、视频:kylin 播放器。[深度的还是无法启动,有法,就用它]

7、聊天:Skype,钉钉。[QQ启动慢,内容还杂,走远点,其实想说这句很久了,只是以前没法]

8、压缩:归档管理器![有此不需其它]

9、输入法:sogou[15.9 还有少许 bug,很明显]。

……

  以上功能,windows 可以给你,现在 linux 也可以给你。你还有什么需求呢!我不清楚,但深度能发展到今,收

纳了不少网民的意见跟建议。

  个人觉得,快过年了,尽早回家,跟家人过个祥和,喜庆的新年是头等大事!一切工作都可以抛开,来年继续。

  这一年,深度进展神速。15.9 有细小不足:

  1、sogou 输入法,中英文标点,跟半全角特不好切换!

  2、视频播放器还是老问题,以前的系统升级不能播,重装了还是不能播,安装会成功,就是不启动。

  3、文件管理器的边框还是主题是暗色却还有很宽的白边!

  4、启动依旧慢!

  若能改掉这些错误,我个人用起来体验会更升一个台阶!

  各位朋友,各位软件设计人员,辛苦了,新年快乐!

深度会让更多的人体会到深度工程师的用心,国产可控系统已经从无到有,从有到可用,从可用到好用,下一步会越来

越好用,感谢深度!!!

Deepin 系统缺强大的生态。

Deepin 的公司缺钱。

但是我的电脑运行 Deepin 比运行 Win10(关闭了各种后台后)流畅,所以,我是 Deepin 用户,用户足够多,以上

两个问题就解决了。

需求不同,期待不同,千人千象吧。但是 deepin 的进步有目共睹!

挺好的,深度加油。

Dengshuangjang / 2019-1-20 18:58

jianguo922 发表于 2019-1-21 09:41:37

xinyonghu 发表于 2019-1-23 16:56:20

lyhdzxf 发表于 2019-1-21 09:05:46

jyxlfd 发表于 2019-1-20 19:22:54 来自移动端

论坛 百科 博客 用户反馈 镜像源

深度社区

Page 42: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

40 2019.01

深度·案例

洪山区电子公文全国产化项目

项目背景武汉市洪山区电子公文全国产化项目是以国

家及相关部委出台的政策作为依据,遵循国家电子公文系统建设标准,按照工信部安全可靠企业考核相关要求,积极探索真实场景下的政务领域国产化替代的方向,验证并实现关键业务的国产化软硬件替代。

“十三五”时期是我国全面推进经济和社会信息化的关键时期,为了“大力推进自主可控信息系统建设,摆脱信息技术受制于人的局面”,国家高度重视自主可控信息产业的发展,明确了计算机信息系统的自主、可控、安全需求,大力推进党、政、军及关系国家安全的关键行业的网络安全建设和自主可控信息系统建设,并相应的出台了一系列的政策和要求,牵引自主可控信息产业的发展。

洪山区电子公文全国产化项目以建设目标为导向,结合实际开展工作。一方面响应国家安全可靠号召,积极推进国产化替代的试点工作;一方面体现对辖区国产化企业的扶植和重视,体现“敢为人先、追求卓越”的工作精神。全面验证国产化自主可控软硬件设备在构建党政核心业务系统的可用性、可靠性、兼容性,推动全国产自主可控信息产业的持续发展。建设面向党政机关的“办公、办文、办事、办会、信息”等核心业务的国产化应用系统;验证国产化软硬件组合的支撑和服务能力。

项目由武汉烽火信息集成技术有限公司(简称:

烽火集成)承建,武汉深之度科技有限公司(简称:深度科技)作为该项目的唯一国产操作系统厂商全程参与项目的建设。

方案介绍方案目标

洪山区电子公文全国产化项目为实现在自主、可控、安全的国产化软硬件环境下,建设电子公文流转、电子公文交换、会议、督查、信息等业务系统,完成运维管理系统、电子签章系统的部署,为电子公文办公提供应用支撑系统,使其具备行政审批、行政服务等功能。

结构组成洪山区电子公文全国产化项目解决方案主要有

以下构成:物理层、基础软件层、业务支持层。 · 物理层主要包括服务器设备、客户端设备、

安全网络设备等。在服务器方面,硬件采用了基于龙芯 (mips) 架构服务器。在客户端方面,使用了基于龙芯 (mips) 架构的 PC。

· 基础软件层主要包括操作系统、数据库、中间件等组件。操作系统分为服务端操作系统和客户端操作系统,分别是深度操作系统龙芯服务器版软件和深度操作系统龙芯桌面版软件。数据库则是使用达梦数据库 DM7.0。中间件是东方通中间件和中创中间件。

· 业务支撑层则是身份验证、电子签章、版式转换等应用组成 OA 系统,各厂商联合攻关适配,完

Page 43: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Sharing

41www.deepin.com

成党政业务系统的国产化适配。

深度操作系统具备和达梦、中创、东方通、金山、金格、数科等参与厂商相关产品的兼容测试与兼容证明,确保各组件在服务端和客户端上的正常运行,为电子公文的稳定运行,提供了保证。

· 服务端:在龙芯服务器安装深度服务器操作系统龙芯版软件,作为电子公文组件依赖的基础服务平台。配合达梦数据库 DM7.0、中创中间件、东方通中间件、OpenJDK 共同组成电子公文系统的服务端。

· 客户端:在龙芯终端安装深度操作系统龙芯桌面版软件,部署了金山 WPS、烽火党政军专用安全浏览器、金格控件、数科 OFD 阅读器等应用软件。

方案实施深度工作

在服务端部署阶段,深度科技配合集成商烽火,完成服务器操作系统适配和部署工作,并与其他软

件厂商配合,完成部署中间件、数据库等软件。在此期间,深度科技分别对中间件 InforSuite AS v9.1和达梦数据库 DM7.0 进行性能调优,如:由于平台的差异性,烽火 OA 在现有的环境下比较慢,深度科技、达梦和烽火联合解决问题,最后发现问题是由于数据库的查询方式效率低导致的,由达梦的工程师提出了解决的方案,经过烽火工程师的改进,最终系统运行速度已经得到了用户的认可。

在客户端部署阶段,深度科技配合烽火集成,完成了深度操作系统龙芯桌面版软件的适配和部署工作,并配合其他厂商,解决在部署过程中遇到的问题。用户使用烽火党政军专用安全浏览器访问洪山区政府办公 OA 系统,深度科技配合其他厂商对浏览器性能进行优化。日常办公方面,深度操作系统对洪山区政府办公使用的惠普、爱普生等打印机做适配与驱动调整,保证了日常办公用的打印设置可正常使用。

在项目进行阶段,深度科技还对相应人员和用户进行培训,帮助他们快速了解如何使用深度的桌面和服务器系统的日常使用与维护,有力地促进和保障项目实施和后续维护。

解决问题在项目的实施阶段和用户使用时,会遇到不少

问题,深度科技根据现场实际情况和用户需求,分析问题并找到解决方法。

· 指定的 Java 版本。用户日常办公使用 OA 系统对服务器的 Java 版本有要求,因此深度科技根据要求,定制相应的 Java 版本并进行测试和修改配置,解决用户对于特定 Java 版本的需求。

· 利旧问题。用户提出要对现有的办公设备利旧

Page 44: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·讲坛

42 2019.01

使用,希望已有的打印机还可以继续使用。深度科技提供了惠普打印机的 mips 驱动,并为应用程序定制开发了打印应用的插件,使得惠普打印机可以在龙芯平台下使用。对于其他大量没有 mips 驱动的打印机,深度科技和烽火集成联合攻关,由烽火集成提供硬件盒子,深度科技提供云打印方案,使得所有的打印外设均可正常使用。

· 审计需求。用户在使用过程中,希望有一套程序可以对打印操作进行审计。深度科技帮助开发了一套打印审计的系统,成功部署并正常使用,满足用户审计需求。

· OA 占用资源过多问题。在系统联合调试过程中,深度科技发现客户端系统资源占用过多,导致用户体现不佳。通过和其他应用厂商联合定位问题,找到了过多占用系统资源的进程,最终由深度科技提供系统补丁,并合并到龙芯版本的仓库中。客户端添加补丁以后,客户端的运行速度恢复正常,使用流畅。

项目收获2018 年 12 月份,由武汉烽火信息集成技术有

限公司承建的 “洪山区电子公文全国产化项目(二期)”已经顺利通过验收,所有硬件(CPU -龙芯提供、主板-龙梦提供),软件(操作系统、数据库、中间件、应用)全部采用国产产品,网络由烽火提供全光通讯的解决方案。

洪山区电子公文全国产化项目(二期)的主体建设任务包括:一是部署航天龙芯系列终端 230 台,安装深度操作系统龙芯桌面版软件,用户范围覆盖四大办领导班子、辖区近 80 家委办局,及 10 个街乡;

二是再造和规范了公文办理、流转的流程,完成了办公 OA 中电子公文流转、电子交换、会议管理、督察督办等十三个子系统的开发并上线运行。

洪山区电子公文全国产化项目(二期)主要包括如下内容:

1、构建安全可靠应用的必备软硬件环境,包括全国产服务器、操作系统、数据库、中间件等产品设备的融合适配和应用。

2、建设符合国家电子公文规范的应用系统,包括电子公文处理类、文件交换系统、督查管理系统、会议管理系统、信息报送系统、安全电子邮件系统、应用支撑系统、安全运维等应用系统。

3、与现行环境的融合适配,如公车管理系统、纪检系统、网格化管理系统、行政审批服务等系统的建设。

4、增加打印设备的可用性,深度科技开发了MIPS 架构下打印应用插件,并集成到深度操作系统龙芯桌面版软件中,使原有的打印设备可在项目中得到使用,降低了用户成本。还添加了打印审计功能,对打印操作追踪审计。

本项目三期启动后,将在政务办公软件运行平稳的基础上,开展行政审批、行政服务、城市网络化管理、社区、计生等与民生相关的应用平台的迁移适配工作,将“互联网 +”与国产自主可控技术融合关联,最终实现安全可靠智慧政务。

Page 45: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Sharing

43www.deepin.com

志愿者装机活动

深度操作系统的发展离不开社区的支持,同时我们也会及时响应社区用户的需求。为了更好的服务、推广、宣传深度操作系统,让更多的社区用户参与线下互助和传播,通过社区用户反馈的建议,我们推出了免费装机地图活动。

本着奉献、友爱、互助、进步的志愿者精神,志愿者们利用业余时间,帮助希望了解 deepin 操作系统的爱好者们,免费上门安装系统,过程中不仅丰富了自己的专业知识,也结识了更多 Linux 爱好者。

活动开始至今,已覆盖全国 31 个省市,参与志愿者近 300 余人。

捐助渠道

深度操作系统的发展离不开社区的支持,为了进一步完善深度操作系统社区生态环境的建设,深度科技对外正式开通捐助渠道。

捐助秉承着完全自愿的原则,不管你是个人还是组织、来自何处、捐助金额多少,都是对社区的发展贡献出自己的力量,我们对你的捐助深表感谢。

捐助定位:· 深度操作系统是一个致力于为全球用户提供美观

易用、安全可靠的 Linux 发行版。· 深度操作系统的发展离不开社区的支持,为了进

一步完善深度操作系统社区生态环境的建设,深度科技内部通过决策,对外正式开通捐助渠道。

· 捐助秉承着完全自愿的原则,不管你是个人还是组织、来自何处、捐助金额多少,都是对社区的发展贡献出自己的力量,我们对你的捐助深表感谢。

捐助目的:· 调查各个项目参与捐助的金额和人数,决定项目

开发的方向和优先级· 持续和深入的开发· 社区活动和建设(例如:内测活动奖品、志愿者

奖励以及社区礼品)

社·区·活·动

¥ 1480.1598 位支持者

Deepin Talk已捐助

¥ 6495337 位支持者

驱动中心已捐助

¥ 1192.6680 位支持者

Deepin Live 修复系统已捐助

¥ 1115.6566 位支持者

Deepin ID 云平台已捐助

¥ 3286.58193 位支持者

深度开发者平台已捐助

Page 46: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·讲坛

44 2019.01

wine 调试日志实现和实践 深度科技 武汉公司 研发中心 / 文

输出日志是一种很常见的调试方法,特别是诡异的多线程 bug,随机崩溃等问题,在正确的地方输出日志缩小范围是最有效的方法。

其次对不熟悉的代码勤快打日志,可以很快熟悉代码的流程和作用;对于一个大型项目来说,一般都会先实现一套自己的日志函数 : 一是方便开发人员轻松打日志,快速 debug;二可以统一日志格式和存储,方便用户报告日志,所以 wine 也不例外,而且 wine 的实现非常简洁。

下面就详细总结一下。

wine 的调试日志实现调试通道 (debug channel)

wine 定义了调试通道的概念来分类日志,将日志的记录和实际的输出分离,无需重新编译,就能灵活控制日志输出。

·每个调试通道有一个唯一的名字,长度不超过14 个有效字符, 一般一个模块至少定义了一个调试通道,比如 gdi32.dll 模块,有一个名称叫 gdi 的调试通道。

·复杂的模块,为了细分日志定义了多个调试通道,比如 gdi32.dll 模块,还有定义 clipping,region,font,bitmap,print,bitblt 等调试通道。

·调试通道在代码里面来看实际是一个 __wine_debug_channel 的结构体,刚好 16 个字节,非常符合 unix 哲学的简单原则 :

struct __wine_debug_channel{ unsigned char flags; char name[15];};

·日志一次只发送给一个调试通道。· 代 码 里 面 增 加 一 个 新 的 调 试 通 道:1) 包

含 include/wine/debug.h; 2) 然 后 用 WINE_DEFAULT_DEBUG_CHANNEL 或 WINE_DEFAULT_DEBUG_CHANNEL 宏来声明。

· 要 知 道 一 个 模 块 定 义 了 哪 些 调 试 通 道, 只需这样搜索该模块的所有源码 :git grep _DEBUG_CHANNEL。

向调试通道发送日志wine 把日志分成了 4 个级别,从高到低依次是:

fixme/err(or)/warn/trace,对应的提供了 4 个宏来输 出 不 同 级 别 的 日 志 到 调 试 通 道:FIXME/WARN/ERR/TRACE,用起来非常清晰,简单。

#define __WINE_DPRINTF(dbcl,dbch) \ do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \ struct __wine_debug_channel * const __dbch = (dbch); \ const enum __wine_debug_class __dbcl = __WINE_DBCL##dbcl; \ __WINE_DBG_LOG

#define __WINE_DBG_LOG(args...) \ wine_dbg_log( __dbcl, __dbch, __FUNCTION__, args); } } while(0)

#define TRACE __WINE_DPRINTF(_TRACE,__wine_dbch___default)#define TRACE_(ch) __WINE_DPRINTF(_TRACE,&__wine_dbch_##ch)#define TRACE_ON(ch) __WINE_IS_DEBUG_ON(_TRACE,&__wine_dbch_##ch)

Page 47: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Sharing

45www.deepin.com

#define WARN __WINE_DPRINTF(_WARN,__wine_dbch___default)#define WARN_(ch) __WINE_DPRINTF(_WARN,&__wine_dbch_##ch)#define WARN_ON(ch) __WINE_IS_DEBUG_ON(_WARN,&__wine_dbch_##ch)

#define FIXME __WINE_DPRINTF(_FIXME,__wine_dbch___default)#define FIXME_(ch) __WINE_DPRINTF(_FIXME,&__wine_dbch_##ch)#define FIXME_ON(ch) __WINE_IS_DEBUG_ON(_FIXME,&__wine_dbch_##ch)

#define ERR __WINE_DPRINTF(_ERR,__wine_dbch___default)#define ERR_(ch) __WINE_DPRINTF(_ERR,&__wine_dbch_##ch)#define ERR_ON(ch) __WINE_IS_DEBUG_ON(_ERR,&__wine_dbch_##ch)

最终都是调用函数 wine_dbg_log 来打日志 :

int wine_dbg_log( enum __wine_debug_class cls, struct __wine_debug_channel *channel, const char *func, const char *format, ... ){ int ret; va_list valist;

if (!(__wine_dbg_get_channel_flags( channel ) & (1 << cls))) return -1;

va_start(valist, format); ret = funcs.dbg_vlog( cls, channel, func, format, valist ); va_end(valist); return ret;}

其 中 的 funcs.dbg_vlog 初 始 化 时 候 指 向 default_dbg_vlog 。

static int default_dbg_vlog( enum __wine_debug_class cls, struct __wine_debug_channel *channel, const char *func, const char *format, va_list args )

在 wine 线程创建成功后会 funcs.dbg_vlog 指向 ntdll/debugtools.c 。

static int NTDLL_dbg_vlog( enum __wine_debug_class cls, struct __wine_debug_channel *channel, const char *function, const char *format, va_list args )

运行前开启调试通道这样的格式定义环境变量 :WINEDEBUG=[class][+/-]channel[,[class2][+/-]

channel2]其中:· class 是 fixme,err,warn,trace 这 4 个 日

志级别的一个单词 , 如果没有指定就开关所有的日志级别。

· channel 就是要开关的调试通道的名称,all代表所有的通道。

· + 就是开启指定调试通道的对应的日志级别。· - 就是关闭指定调试通道的对应的日志级别。

举例 :WINEDEBUG=warn+allWINEDEBUG=warn+dll,+heapWINEDEBUG=fixme-all,warn+cursor,+relay

如果没有定义 WINEDEBUG 环境变量 , 发给每个调试通道的 fixme 和 err 级别的日志都会输出;wine 默认同时开启运行的调试通道是 256 个,由这个宏 MAX_DEBUG_OPTIONS 决定。

关键代码如下 :

enum __wine_debug_class{ __WINE_DBCL_FIXME, __WINE_DBCL_ERR, __WINE_DBCL_WARN, __WINE_DBCL_TRACE,

__WINE_DBCL_INIT = 7 /* lazy init flag, bit7 */};

Page 48: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·讲坛

46 2019.01

static unsigned char default_flags = (1 << __WINE_DBCL_ERR) | (1 <name, debug_options, nb_debug_options, sizeof(debug_options[0]), cmp_name ); if (opt) return opt->flags; } /* no option for this channel */ if (channel->flags & (1 <flags = default_flags; return default_flags;}

仅标记作用的调试通道pid: 在每个日志的前面插入当前进程的 ID 号 ,

格式 : %04x 。tid: 在每个日志的前面插入当前线程的 ID 号 , 格

式 : %04x.timestamp: 在每个日志的前面插入时间戳 , 相

对系统启动的时间 , 单位秒 , 保留 3 位小数 。

特殊的高级的调试通道seh: 记录所有的异常情况,快速定位程序崩溃

地址。

0009:trace:seh:raise_exception code=c00002b5 flags=0 addr=0xc4194be ip=0c4194be tid=00090009:trace:seh:raise_exception info[0]=000000000009:trace:seh:raise_exception eax=00000006 ebx=0b6f4f58 ecx=08b44020 edx=0033d15c esi=0dfde520 edi=0df800200009:trace:seh:raise_exception ebp=0033d0d0 esp=0033d0c0 cs=0023 ds=002b es=002b fs=0063 gs=006b flags=00210206

relay: 无需修改代码,记录程序调用 wine 实现的所有 API 的详细参数和返回值,

...0017:Call KERNEL32.CreateFileA(7ea8e936 "CONIN$",c0000000,00000003,00000000,00000003,00000000,00000000) ret=7ea323fd0 0 1 7 : Ret K E R N E L 3 2 . C reate F i l e A ( ) ret va l = 0 0 0 0 0 0 2 3 ret=7ea323fd...

snoop: 无 需 修 改 代 码, 记 录 程 序 对 第 三 方

native 模块的所有导出函数的调用参数和返回值。snoop 是自己检查 stack 数据和反汇编来探测函数调用约定,参数和返回地址的,如果探测错了会影响程序的稳定,甚至导致程序崩溃,非常规情况下使用。

...t ra ce : s n o o p : S N O O P _ S e t u p D L L h m o d = 0 x 4 a e 9 0 0 0 0 , name=gdiplus.dll0 0 4 3 : C A L L M S V C R 1 0 0 _ C L R 0 4 0 0 . w c s c p y _s(04b7c808,0000000c,0033d188 L"gdiplus.dll") ret=79203d6b0043:RET MSVCR100_CLR0400.wcscpy_s() retval=00000000 ret=79203d6b0 0 4 3 : C A L L M S V C R 1 0 0 _ C L R 0 4 0 0 . m e m s e t ( 0 0 3 3 d c9c,00000000,00000010) ret=792bd7270043:RET MSVCR100_CLR0400.memset() retval=0033dc9c ret=792bd7270043:CALL gdiplus.GdiplusStartup() ret=04b8e7750043:RET gdiplus.GdiplusStartup(03c00ae0,0033dc9c,0033dcec) retval=00000000 ret=04b8e775...0043:CALL gdiplus.GdipCreateFromHWND() ret=04b8e8b30043:RET gdiplus.GdipCreateFromHWND(0004003a,0033e988) retval=00000000 ret=04b8e8b3...

relay 和 snoop 的缺点是记录的日志巨大导致程序反应非常慢,只能在没有任何思路,一筹莫展时使用。

运行中开关调试通道方法 1:运行任务管理器 (wine taskmgr),打开

“进程”标签页,右键选中进程,在右键菜单里面选中“编辑调试频道”。这个方法只能开关事先在WINEDEBUG 环境变量里面列出的调试通道。

方法 2:winedbg 里面 attach 指定的 wine 进程,然后用 set 命令:

·set + channel 开启指定通道的所有 fixme/err/warn/trace 日志。

·set – channel 关闭指定通道的所有 fixme/err/warn/trace 日志。

·set class + channel 开启指定通道的 fixme/err/warn/trace 日志的一类。

Page 49: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Sharing

47www.deepin.com

·set class – channel 关闭指定通道的 fixme/err/warn/trace 日志的一类。

·winedbg 的 set 命 令 也 只 能 设 置 用WINEDEBUG 已经开启了的调试通道。

·如果没有在 WINEDEBUG 里面定义的,就会提示 : Unable to find debug channel xxx。

方法 3: winedbg 的 attach 指定的 wine 进程,手 动 修 改 debug_options 和 nb_debug_options的数据:因为 debug_options 是按照调试通道名称字符串比较排序的,所以开启多个通道需要手动排序。

这 个 方 法 适 合 运 行 程 序 时 忘 记 设 置WINEDEBUG,但是想查看某个调试通道日志的时候又不想重新运行程序的时候使用。

Wine-dbg>set + winUnable to find debug channel winWine-dbg>p debug_options[0]{flags=0, name=""}Wine-dbg);set debug_options[0].flags=0xfWine-dbg>p debug_options[0]{flags=f, name=""}Wine-dbg>set debug_options[0].name[0]='w'Wine-dbg>set debug_options[0].name[1]='i'Wine-dbg>set debug_options[0].name[2]='n'Wine-dbg>set debug_options[0].name[3]= 0Wine-dbg>p debug_options[0]{flags=f, name=" 楷 n"}Wine-dbg>p &debug_options[0]0xf77092d0Wine-dbg>x /s 0xf77092d1winWine-dbg>p nb_debug_options0Wine-dbg>set nb_debug_options=1

方法 4:一般正式发布的 libwine.so 没有调试 符 号, 就 只 能 反 汇 编 定 位 debug_options 和nb_debug_options 的地址。

1) 先 查 询 __wine_dbg_get_channel_flags的偏移,readelf -s libwine.so.1.0 | grep __wine_dbg :

109: 00005110 206 FUNC GLOBAL DEFAULT 12 __wine_dbg_set_channel_fl@@WINE_1.0166: 00005030 223 FUNC GLOBAL DEFAULT 12 __wine_dbg_get_channel_fl@@WINE_1.0172: 00005390 253 FUNC GLOBAL DEFAULT 12 __wine_dbg_set_functions@@WINE_1.0

2) 再 查 询 libwine.so 的 基 地 址 得 到 __wine_dbg_get_channel_flags 的地址

Wine-dbg>info shareModule Address Debug info Name (23 modules)...ELF f75d5000-f778c000 Dwarf libwine.so.1 @,/opt/cxoffice/bin/../lib/libwine.so.1...

3) 接 着 看 __wine_dbg_get_channel_flags 反汇编 :

Wine-dbg>disass 0xf75d5000+0x50300xf75da030 __wine_dbg_get_channel_flags in libwine.so.1: push ebp 0xf75da031 __wine_dbg_get_channel_flags+0x1 in libwine.so.1: mov ebp, esp 0xf75da033 __wine_dbg_get_channel_flags+0x3 in libwine.so.1: push edi 0xf75da034 __wine_dbg_get_channel_flags+0x4 in libwine.so.1: push esi 0xf75da035 __wine_dbg_get_channel_flags+0x5 in libwine.so.1: push ebx 0xf75da036 __wine_dbg_get_channel_flags+0x6 in libwine.so.1: call 0xf75d81a0 0xf75da03b __wine_dbg_get_channel_flags+0xb in libwine.so.1: add ebx, 0x19dfc5 0xf75da041 __wine_dbg_get_channel_flags+0x11 in libwine.so.1: sub esp, 0x1c 0xf75da044 __wine_dbg_get_channel_flags+0x14 in libwine.so.1: mov ecx, [ebx+0x134] --> nb_debug_options0xf75da04a __wine_dbg_get_channel_flags+0x1a in libwine.so.1: cmp ecx, 0xffffffff 0xf75da04d __wine_dbg_get_channel_flags+0x1d in libwine.so.1: jz 0xf75da0f0 0xf75da053 __wine_dbg_get_channel_flags+0x23 in libwine.so.1: test ecx, ecx 0xf75da055 __wine_dbg_get_channel_flags+0x25 in libwine.so.1: jz 0xf75da0c0 0xf75da057 __wine_dbg_get_channel_flags+0x27 in libwine.so.1: mov eax, [ebp+0x8] 0xf75da05a __wine_dbg_get_channel_flags+0x2a in libwine.so.1: mov edi, ecx 0xf75da05c __wine_dbg_get_channel_flags+0x2c in libwine.

Page 50: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·讲坛

48 2019.01

so.1: mov dword [ebp-0x1c], 0x0 0xf75da063 __wine_dbg_get_channel_flags+0x33 in libwine.so.1: add eax, 0x1 0xf75da066 __wine_dbg_get_channel_flags+0x36 in libwine.so.1: mov [ebp-0x24], eax 0xf75da069 __wine_dbg_get_channel_flags+0x39 in libwine.so.1: lea eax, [ebx+0x260] --> debug_options 0xf75da06f __wine_dbg_get_channel_flags+0x3f in libwine.so.1: mov [ebp-0x28], eax 0xf75da072 __wine_dbg_get_channel_flags+0x42 in libwine.so.1: jmp 0xf75da07f __wine_dbg_get_channel_flags+0x4f in libwine.so.10xf75d3074 __wine_dbg_get_channel_flags+0x44 in libwine.so.1: lea esi, [esi] ...0xf75d81a0: mov ebx, [esp] 0xf75d81a3: ret

gcc 习 惯 通 过 ebx 寄 存 器 来 引 用 全 局 变量 , 所 以 nb_debug_options 的 地 址 是:0xf75d303b+0x19dfc5+0x134;debug_options 的地址是 : 0xf75d303b+0x19dfc5+0x260;然后参考方法 2 的 set 命令修改内存即可。

relay 实现原理在 LoadLibrary 内部检查开启了 relay 通道并且

是加载 wine 内建的 dll, 就调用 RELAY_SetupDLL 解析 dll 的 导 出 函 数 表 (IMAGE_DIRECTORY_ENTRY_EXPORT), 对 导 出 表 的 AddressOfFunctions 数 组每个成员,先备份原始值,然后修改成可以跳到relay_call 函 数 的 hack 函 数 地 址, hack 函 数 在faked PE 模块里面, 固定的 24 个字节大小,形式都是这样的 :

0x7e7a4210: push esp 0x7e7a4211: push 0x50000 0x7e7a4216: call 0x7e7a6a40 __wine_spec_get_pc_thunk_eax in gdi320x7e7a421b: lea eax, [eax+0xadd31] 0x7e7a4221: push eax 0x7e7a4222: call dword [eax+0x4] --> relay_call 0x7e7a4225: ret 0x14

不同的 API,变化的是里面的数字常量而已。在GetProcAddress 内部检查是否开启了 relay 通道,

是 就 调 用 RELAY_GetProcAddress 返 回 hack 的 函数地址。以 user32 模块的 GetMenu 举例,返回的hack 的 GetMenu 函数:

FARPROC RELAY_GetProcAddress( HMODULE module, const IMAGE_EXPORT_DIRECTORY *exports, DWORD exp_size, FARPROC proc, DWORD ordinal, const WCHAR *user ){ struct relay_private_data *data; const struct relay_descr *descr = (const struct relay_descr *)((const char *)exports + exp_size);

if (descr->magic != RELAY_DESCR_MAGIC || !(data = descr->private)) return proc; /* no relay data */ if (!data->entry_points[ordinal].orig_func) return proc; /* not a relayed function */ if (check_from_module( debug_from_relay_includelist, debug_from_relay_excludelist, user )) return proc; /* we want to relay it */ return data->entry_points[ordinal].orig_func;}

Wine-dbg>disass proc0x7e8d7cf0: push esp 0x7e8d7cf1: push 0x10130 0x7e8d7cf6: call 0x7e8dae44 __wine_spec_get_pc_thunk_eax in user320x7e8d7cfb: lea eax, [eax+0xd9fcd] 0x7e8d7d01: push eax 0x7e8d7d02: call dword [eax+0x4] 0x7e8d7d05: ret 0x4 Wine-dbg>p 0x7e8d7cfb+0xd9fcd+0x4 0x7e9b1cccWine-dbg>x /4x 0x7e9b1ccc0x7e9b1ccc: 7bc76c2c 7bc77270 00124640 7e8d615dWine-dbg>disass 0x7bc76c2c0x7bc76c2c relay_call in ntdll: push ebp 0x7bc76c2d relay_call+0x1 in ntdll: mov ebp, esp 0x7bc76c2f relay_call+0x3 in ntdll: push esi 0x7bc76c30 relay_call+0x4 in ntdll: push edi 0x7bc76c31 relay_call+0x5 in ntdll: push ecx 0x7bc76c32 relay_call+0x6 in ntdll: push dword [ebp+0x10] 0x7bc76c35 relay_call+0x9 in ntdll: push dword [ebp+0xc] 0x7bc76c38 relay_call+0xc in ntdll: push dword [ebp+0x8] 0x7bc76c3b relay_call+0xf in ntdll: call 0x7bc76835 relay_trace_entry [../wine_git/dlls/ntdll/relay.c:334] in ntdll0x7bc76c40 relay_call+0x14 in ntdll: movzx ecx, byte [ebp+0xe] ...

原始的 GetMenu 地址 :

Wine-dbg>info local 0x7bc772f4 RELAY_GetProcAddress+0x75: (0033eac8)

Page 51: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Sharing

49www.deepin.com

HMODULE module=0x7e8d0000 (parameter [EBP+8]) IMAGE_EXPORT_DIRECTORY* exports=0x7e9ad19c (parameter [EBP+12]) DWORD exp_size=0x4b2c (parameter [EBP+16]) FARPROC proc=0x7e8d7cf0 (parameter [EBP+20]) DWORD ordinal=0x130 (parameter [EBP+24]) WCHAR* user=0x0(nil) (parameter [EBP+28]) struct relay_private_data* data=0x124640 (local [EBP-12]) struct relay_descr* descr=0x7e9b1cc8 (local [EBP-16])Wine-dbg>p *descr{magic=0xdeb90001, relay_call=0x7bc76c2c, relay_call_regs=0x7bc77270, private=0x124640, entry_point_base=" 恌怲 h", entry_point_offsets=0x7e9744f8, arg_types=0x7e975048}Wine-dbg>x /14x 0x124640 0x00124640: 7e8d0000 00000001 72657375 000032330x00124650: 00000000 00000000 00000000 000000000x00124660: 00000000 00000000 00000000 000000000x00124670: 7e913010 7e9aee17Wine-dbg>x /10x 0x00124670+0x130*80x00124ff0: 7e928890 7e9b018c 7e92c6d0 7e9b01940x00125000: 7e927fc0 7e9b01a3 7e92cc30 7e9b01be0x00125010: 7e92b680 7e9b01d3Wine-dbg>x /10c 0x7e9b018c0x7e9b018c: G e t M e n u G eWine-dbg>disass 0x7e9288900x7e928890 GetMenu [../wine_git/dlls/user32/menu.c:4208] in user32: lea ecx, [esp+0x4] 0x7e928894 GetMenu+0x4 [../wine_git/dlls/user32/menu.c:4208] in user32: and esp, 0xfffffff0 0x7e928897 GetMenu+0x7 [../wine_git/dlls/user32/menu.c:4208] in user32: push dword [ecx-0x4] 0x7e92889a GetMenu+0xa [../wine_git/dlls/user32/menu.c:4208] in user32: push ebp 0x7e92889b GetMenu+0xb [../wine_git/dlls/user32/menu.c:4208] in user32: mov ebp, esp 0x7e92889d GetMenu+0xd [../wine_git/dlls/user32/menu.c:4208] in user32: push edi 0x7e92889e GetMenu+0xe [../wine_git/dlls/user32/menu.c:4208] in user32: push esi 0x7e92889f GetMenu+0xf [../wine_git/dlls/user32/menu.c:4208] in user32: push ebx 0x7e9288a0 GetMenu+0x10 [../wine_git/dlls/user32/menu.c:4208] in user32: push ecx 0x7e9288a1 GetMenu+0x11 [../wine_git/dlls/user32/menu.c:4208] in user32: call 0x7e8d5b60 __x86.get_pc_thunk.bx in user32...

relay_call 里 面 调 用 relay_trace_entry/relay_trace_exit 来记录函数的进和出,以及调用真实的API。

snoop 的实现原理在 LoadLibrary 内 部 检 查 开 启 了 snoop 通

道 并 且 是 加 载 native 的 dll, 就 调 用 SNOOP_SetupDLL,解析 dll 的导出函数,对每个导出函数动态分配一块可读写和执行的 hack 内存。

在 GetProcAddress 内部检查开启了 snoop 通道, 就 调 用 SNOOP_GetProcAddress, 对 hack 内存填充一个可以跳到 SNOOP_Entry 函数的 jmp 指令, 然后返回把这个 hack 内存块的首地址。

SNOOP_Entry 探测函数的返回地址 / 调用约定/ 调用参数,打印出来,然后把当前 EIP 设置成真实的导出函数,把返回地址设置 SNOOP_Return。

用日志来解决实际的问题

先收集日志,然后重点看 err:,fixme:, seh: 的日志,一般就是出问题的地方了。

Page 52: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·讲坛

50 2019.01

从 kprobes 到 ftrace 深度科技 武汉公司 研发中心 / 文

kprobes 简介kprobes 是 Linux 内核里跟踪内核函数最常见的

方法之一。它的基本原理是在给定地址处首先进行原二进制代码的备份,然后加上一个 int 3(x86 架构)的单字节指令。这样,当内核执行到对应地址的代码时首先执行 int 3 软中断指令,内核捕获到这个软中断,发现这是一个 kprobes 的钩子,随后即通过预先准备好的跳床(trampoline)代码执行用户设定的 kprobes 预处理函数(pre_handler),继而单步执行备份的原二进制代码,然后执行用户设定的kprobes 后处理函数(post_handler),最后跳转回相应的原代码处继续执行。

kprobes 有 两 个 变 体, 它 们 分 别 是 jprobe 与kretprobe。

我们一般使用 jprobe 来通过内核函数的函数名在入口处跟踪内核函数,它底层是基于 kprobes 的,但是在注册 kprobes 时首先在内核符号表中查找到了对应内核函数的入口地址。在运行时产生了 int 3后,内核首先会复制对应的调用栈与寄存器,以便执行 jprobe 处理函数,随后跳转到 jprobe 处理函数(break_handler)处,执行完处理函数之后再恢复栈,并调用原函数。

而 kretprobe 则是在内核函数出口处被调用。它在函数入口处首先获得函数的返回地址,并提供了回调处理函数的接口可以用来获取当前的参数值

(通过保存下来的寄存器组),继而修改返回地址为跳床地址。在函数返回时会跳转到跳床上执行对应的 kretprobe 返回处理函数,最后返回到正确的返回地址。

kprobes 有多种实现,原始实现如上所述,即通过软中断指令、内核的中断处理函数以及跳床代码来实现。这种实现方式由于只需要修改一个字节,所以较为安全,但是中断处理与单步执行使得这种实现方式性能较低,而且需要考虑抢占、中断等诸多问题。此外,由于 kprobes 在实现时使用了perCPU 数据,因此在执行时需要禁用抢占,以保证相应的 perCPU 数据不会被覆盖,从而使得在同一个处理器核上的 kprobes 旧实例访问到新实例的数据,导致内核崩溃。

因此,内核要求用户提供的 kprobes 处理函数不能调用任何可能导致让出处理器核的函数,例如使用信号量、读写文件等,此要求使得 kprobes 开发受限较多,容易导致内核崩溃或者额外的性能损耗(因为只能使用自旋锁进行同步)。

随后,内核又提供了两种 kprobes 的实现方式,第一种是通过跳转指令替换软中断来实现,主要需要解决的问题是跳转的范围较小,而且跳转指令较长,可能会修改不止一个指令(主要是 x86 架构),会有额外的复杂性考虑。

Page 53: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Sharing

51www.deepin.com

另外,跳转方式也不支持 jprobe(需要模拟栈与函数执行)。第二种则是通过 ftrace 来支持对内核函数的 kprobes,而 kprobes 最常用的也就是对内核函数的跟踪,直接对任意地址的跟踪其实是比较少见的。实际上,由于 jprobe 与 ftrace 功能的重叠以及 jprobe 本身诸多的限制,在内核 4.15 中已经禁用了 jprobe,在内核 4.19 中已经完全删除了jprobe 的功能。

相对于 kprobes 来说,ftrace 不仅性能更好,而且不用考虑不能让出处理器核的问题,因此我们推荐使用 ftrace 而不是 kprobes 来对内核函数进行跟踪。而且,使用 ftrace 还有一个额外的好处,那就是很容易实现对内核函数的替换,虽说 kprobes也可以实现内核函数的替换,但操作起来比 ftrace就麻烦多了。实际上,内核热补丁 livepatch 也是基于 ftrace 开发的。

基于 ftrace 的内核函数跟踪

ftrace 的 实 现 依 赖 于 gcc 提 供 的 mcount 特性,此特性是在每个函数的入口处加入对自定义的mcount 函数的调用,如果没有调用的话这部分代码会被填充为 nop(或者等效指令,如 mov %eax, %eax),从而保证相应的性能损耗极低。当用户针对某个函数设置了回调函数时,对应的 nop 指令就会被替换为函数调用指令。在此处需要注意的是内核函数起始处 mcount 占位代码指令的长度是与架构相关的,在内核中使用 MCOUNT_INSN_SIZE 表示这个指令的长度,在 x86 下 MCOUNT_INSN_SIZE为 5。

多说无益,放码出来。我们先来看看如何使用ftrace 对 do_filp_open 内核函数进行跟踪,在打开每个文件的时候,内核都会调用到 do_filp_open 函

数,因此此函数是一个会被频繁调用的内核函数。下面是源代码(省略了头文件与许可证声明等):

static unsigned long get_arg(struct pt_regs* regs, int n){ switch (n) {#if defined(CONFIG_X86_64)

case 1: return regs->di; case 2: return regs->si; case 3: return regs->dx; case 4: return regs->cx; case 5: return regs->r8; case 6: return regs->r9;

#elif defined(CONFIG_CPU_LOONGSON3)

case 1: // a0 case 2: // a1 case 3: // a2 case 4: // a3 return *(unsigned long*)((char *)regs + (3+n)*8);

#endif // CONFIG_X86_64 default: return 0; } return 0;}

static void notrace my_ftrace_func(unsigned long ip, unsigned long parent_ip, struct ftrace_ops *ops, struct pt_regs *regs){ struct filename* fn = (struct filename*)get_arg(regs, 2); pr_info("%pf called from %pf: %s\n", (void *)ip, (void *)parent_ip, fn->name);}

static struct ftrace_ops fops = { .func = my_ftrace_func, .flags = FTRACE_OPS_FL_SAVE_REGS,};

int __init init_module(){ char* fname = "do_filp_open"; int ret = ftrace_set_filter(&fops, fname, strlen(fname), 0); if (ret) { pr_err("ftrace-set-filter error: %d\n", ret); return ret; }

ret = register_ftrace_function(&fops); if (ret) { pr_err("reg-ftrace-func error: %d\n", ret); return ret; }

pr_info("reg-ftrace-peek done\n");

Page 54: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·讲坛

52 2019.01

return 0;}

void __exit cleanup_module(){ unregister_ftrace_function(&fops); pr_info("unreg-ftrace-peek done\n");}

可以看到,在使用 ftrace 跟踪内核函数时,关键的数据结构是 struct ftrace_ops。开发者需要在此结构体中设置自定义跟踪函数指针,以及对应的ftrace 参数,例如在这里设置的就是 FTRACE_OPS_FL_SAVE_REGS,表示需要在调用跟踪函数时将调用参数保存下来传递过去。在注册跟踪函数时需要首先调用 ftrace_set_filter 传入对应的跟踪函数名与 上 述 的 结 构 体 指 针, 继 而 调 用 register_ftrace_function 注册跟踪函数。

在跟踪函数中则可以根据传入的寄存器组得到参数值(与架构相关),然后还可以获得当前的代码 地 址(ip), 调 用 者 的 地 址(parent_ip) 等。而 do_filp_open 内 核 函 数 的 参 数 为 int dfd, struct filename *pathname, const struct open_flags *op,第二个参数为 struct filename* 的类型,因此可以通过架构相关的 get_arg 函数得到第二个参数,并打印出文件名来。

在不需要跟踪时,可以调用 unregister_ftrace_function 注销注册函数即可。

在上述的跟踪函数 my_ftrace_func 中,可以调用其它内核,包括可能引起让出处理器的内核函数,例如使用信号量的内核函数,睡眠的内核函数等,而不用担心导致内核崩溃。

除了以上述方式对单个内核函数进行跟踪以外,ftrace 还支持以通配符方式对多个内核函数同时进行

跟踪,如下。

static void notrace my_ftrace_func(unsigned long ip, unsigned long parent_ip, struct ftrace_ops *ops, struct pt_regs *regs){ char self[128] = {}, parent[128] = {}; sprint_symbol_no_offset(parent, parent_ip); sprint_symbol_no_offset(self, ip); pr_info("%s called from %s\n", self, parent);}

static struct ftrace_ops fops = { .func = my_ftrace_func, .flags = FTRACE_OPS_FL_SAVE_REGS,};

int __init init_module(){ char* fname = "*_permission"; int ret = ftrace_set_filter(&fops, fname, strlen(fname), 0); if (ret) { pr_err("ftrace-set-filter error: %d\n", ret); return ret; }

ret = register_ftrace_function(&fops); if (ret) { pr_err("reg-ftrace-func error: %d\n", ret); return ret; } return 0;}

void __exit cleanup_module(){ unregister_ftrace_function(&fops);}

在上面的代码中,主要关注变化的代码即可。在 ftrace_set_filter 函 数 中 跟 踪 函 数 的 名 称 从 do_filp_open 变化成为 *_permission,表示对所有以 _permission 结尾的内核函数进行跟踪。此外,在跟踪函数 my_ftrace_func 中,因为需要跟踪多个内核函数,每个内核函数的参数不一样,因此就不能调用 get_arg 函数获取函数参数了,此时可以将 ip 与parent_ip 定位到对应的函数名称,并将其打印出来,进行跟踪查看。

使用 ftrace 对内核函数的跟踪基本实现如上所述,下面我们来看看如何使用 ftrace 修改内核函数

Page 55: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Sharing

53www.deepin.com

的行为。

基于 ftrace 修改内核函数使用 ftrace 修改内核函数的过程是比较简单的:·在挂钩函数中跳转到自定义函数,如果只需要

挂钩一个内核函数,自定义函数可以与挂钩函数合并,如果需要提供通用的挂钩处理,则可以通过挂钩函数的 struct ftrace_ops* 参数获得自定义函数的地址,然后设置 IP 寄存器的值进行直接跳转,以方便直接使用调用栈与寄存器组以传递函数参数。在这里使用跳转也可以避免与具体的函数耦合,可以使用一个挂钩函数处理多个自定义函数;

·在自定义函数中,获得原内核函数的地址,并加上 MCOUNT_INSN_SIZE,以获得真正的内核函数实现入口,不然会导致无限循环;

·根据参数判断是否需要调用原内核函数或者直接返回失败(例如 -EPERM);

·调用原内核函数;·获得原内核函数的返回值,并进行进一步处理;·从自定义函数中返回,由于挂钩函数是通过跳

转进入自定义函数的,因此也同时从挂钩函数返回;

若我们要修改内核中的 vfs_create 函数(其函数 签 名 为 struct inode*, struct dentry*,umode_t, bool),如果路径中包含 123456 则返回失败值EPERM,下面是相应的实现。

struct ftrace_hook { unsigned long orig_func; unsigned long my_func; struct ftrace_ops fops;} fhook;

static int my_vfs_create(struct inode *dir, struct dentry *dentry, umode_t mode, bool want_excl){ static int (*orig_vfs_create)(struct inode *dir, struct dentry *dentry, umode_t mode, bool want_excl) = 0; if (orig_vfs_create == 0) *((unsigned long *)&orig_vfs_create) = fhook.orig_func +

MCOUNT_INSN_SIZE; char buf[256]; char *path = dentry_path_raw(dentry, buf, sizeof(buf)); if (IS_ERR(path)) { pr_info("vfs-create called\n"); } else if (strstr(path, "123456")) { pr_info("vfs-create: %s REJECTED\n", path); return -EPERM; } else { pr_info("vfs-create: %s\n", path); }

int ret = orig_vfs_create(dir, dentry, mode, want_excl); if (IS_ERR(path)) pr_info("vfs-create ret: %d\n", ret); else pr_info("vfs-create: %s, ret: %d\n", path, ret); return ret;}

static void notrace my_ftrace_func(unsigned long ip, unsigned long parent_ip, struct ftrace_ops *ops, struct pt_regs *regs){ struct ftrace_hook *hook = container_of(ops, struct ftrace_hook, fops); regs->ip = (unsigned long)hook->my_func;}

int __init init_module(){ fhook.orig_func = kallsyms_lookup_name("vfs_create"); if (fhook.orig_func == 0) { pr_err("kallsyms-lookup-name failed\n"); return -1; } fhook.my_func = (unsigned long)&my_vfs_create; fhook.fops.func = my_ftrace_func; fhook.fops.flags = FTRACE_OPS_FL_SAVE_REGS | FTRACE_OPS_FL_IPMODIFY | FTRACE_OPS_FL_RECURSION_SAFE;

int ret = ftrace_set_filter_ip(&fhook.fops, fhook.orig_func, 0, 0); if (ret) { pr_err("ftrace-set-filter-ip error: %d\n", ret); return ret; }

ret = register_ftrace_function(&fhook.fops); if (ret) { pr_err("reg-ftrace-func error: %d\n", ret); ftrace_set_filter_ip(&fhook.fops, fhook.orig_func, 1, 0); return ret; } return 0;}

void __exit cleanup_module(){ int ret = unregister_ftrace_function(&fhook.fops); if (ret) { pr_err("unreg-ftrace-func error: %d\n", ret);

Page 56: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·讲坛

54 2019.01

return; } ret = ftrace_set_filter_ip(&fhook.fops, fhook.orig_func, 1, 0); if (ret) { pr_err("ftrace-set-filter-ip error: %d\n", ret); return; }}

上面的代码主要分为三个部分。

首先是注册。在注册 ftrace 函数时,在内核模块 初 始 化 函 数 init_module 中 首 先 调 用 kallsyms_lookup_name 获 得 内 核 函 数 vfs_create 的 地 址,然 后 调 用 ftrace_set_filter_ip 直 接 通 过 地 址 进 行内 核 函 数 的 ftrace 跟 踪, 在 这 里, 需 要 额 外 加 入FTRACE_OPS_FL_IP_MODIFY 参数,以使得挂钩函数能够修改 IP 寄存器以实现跳转执行,同时原 vfs_create 内 核 函 数 的 地 址(orig_func) 与 自 定 义 函数的地址(my_func)也被保存在了结构体中,以便挂钩函数使用。最后调用 ftrace_set_filter_ip 与register_ftrace_function 进行真正的注册。

其次是运行。在内核调用 vfs_create 内核函数时,对应的挂钩函数 my_ftrace_func 会首先被调用,它从调用参数 struct ftrace_ops* 中通过 container_of宏获得自定义函数的地址,并通过设置 IP 寄存器的值直接进行跳转执行。在自定义函数 my_vfs_create中,它首先获取了原内核函数的地址,并将其加上了 MCOUNT_INSN_SIZE, 接 下 来 my_vfs_create检查参数,如果路径名中含有 123456,则直接返回 -EPERM,而并不调用真正的 vfs_create 内核函数,不然则调用真正的 vfs_create 内核函数(跳过了开始的 MCOUNT_INSN_SIZE 个字节),并将返回值返回。

最后是注销。在不需要 ftrace 时,内核模块注销 函 数 cleanup_module 会 首 先 调 用 unregister_

ftrace_function 注 销 ftrace, 接 着 调 用 ftrace_set_function_ip 撤销对相应代码地址的修改即可。

通过上述代码,我们就已经可以通过 ftrace 对内核函数进行在线替换了。

参考资料

kprobes 与 ftrace 都是 Linux 内核提供的特性,而且在已经进入内核较长时间了。在写作本文的过程中,参考了不少源码与资料,源码当然是直接看内核了。

其它主要的参考资料如下: Linux Tracing Technologies kprobes ftrace Linux 4.15 Linux 4.19 How Linux kprobes works Djprobe Hooking Linux Kernel Functions。

Page 57: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Sharing

55www.deepin.com

理解 memory barrier 深度科技 武汉公司 研发中心 / 文

本文只适合粗看,从不同层面上过一过相关概念,请不要带脑子。

细看请参考其他更优秀的文章。

为什么会有 memory barrier?要 理 解 memory barrier 必 须 先 知 道 memory

ordered( 内存顺序 ) 的概念,接触过一点底层架构的同学大概知道,x86 是 strongly-ordered,arm 是weakly-ordered。

但实际上这种说法都是不准确的,比如 386 的x86 就真的是严格的 strongly-ordered,但目前大家使用的 x86 架构并不会保证 load-store 序列。

m e m o r y o r d e r e d 又 和 s p e c u l a t i v e execution( 预测执行 ) 有极大关系。

程 序 员 脑 子 里 CPU 执 行 的 方 式 是,( 假 设 为PModel):

·读取 PC 指向的指令·PC++ 或者 PC = target( 如果是跳转指令 )·执行读取到的指令·重复 1~3

但真实的硬件都是一次读取一批指令,但 由于存在内存操作这类极度耗时的指令,所以 PModel简单方式会存在大量的 CPU 空闲时间 。

为了提高硬件利用率,在 CPU 空闲时间里,speculative execution 模块就会工作提前执行后面的指令。

1 int port, action;2 void forbar(int base)3 {4 action = 4;

5 port = base + 3;6 }

比如以上这个简单的函数,在 line 4 时 CPU 需要把常量 4 存放到 action 所在位置的内存中,这时候如果 CPU 按照 PModel 的方式则必须等内存操作执行结束后才能执行 base+3 这个纯计算的操作 ( 速度很快 ),然后再把计算结果存放到 port 所在地址的内存中。

因此效率更高的方式是先把没有数据依赖的操作提前进行 ( 当 PC 指针还没变动时 ),等实际要执行这条指令的时候就可以快速得到结果。

但遇到存储相关的指令时这种方式会就存在两个问题。

乱序执行乱序执行是指 CPU 为了更好的效率,不按 program ordered( 即程序员脑子里的逻辑顺序 )执行, 而是先执行 line 5 然后执行 line 4, 一般我们会说这个只要是在单核系统下是没问题的。

但实际上有没有问题不取决于有几个核,而在于理解问题的本质。

比如 action 和 port 并非是内存地址里的数据,而是硬件设备的地址或者即使是内存地址的数据。但涉及到 DMA 区域,则会出现至少两个观察者。一个是 CPU 本身,一个是磁盘驱动等外设 ( 实际也 可以理解为是一个 CPU)。

多核并发执行其他文章里有很详细的解释这种 CPU 即使是按照 program ordered 来执行的,但如果存在多个 CPU 同时执行且都操作了 action 或者port 这些地址,则一样会出现各种错误。

从而出现了各种 lock 机制来定义临界区避免多个实体同时操作了临界区所保护的地址区域。

Page 58: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·讲坛

56 2019.01

今天我们说到的 memory barrier 实际只涉及到如何处理乱序的问题。

CPU 设计者选择了不同的方式来缓解这个问题 ( 不是解决,因为有充足的理由让程序员面临这些问题 )。

memory barrier 的种类软 件 层 面 来 说, 很 多 地 方 都 有 定 义 memory

barrier api,最早 ( 应该 ) 的是 Java memory model对此进行了详细的定义,然后 c++11 也做出了详细的定义。

此 外 gtk,qt,erlang,gcc,Go 等 语 言 实 现 或 框 架API 都有定义各种的 barrier api。

硬 件 层 面 来 说, 所 有 的 CPU 都 会 有 准 确 的memory model 描述,说明了在哪里情况下会出现哪些乱序执行。

我们先不考虑具体的软件或具体的硬件情况,仅仅从逻辑上考虑这个问题。

最简单的模型就是只简化内存操作为 Store( 内存 存 储 ) 和 Load( 内 存 读 取 ) 这 两 个 操 作, 因 此2×2 可以组合出至少以下 4 种序列。

· Store, Load (SL) · Store, Store (SS) · Load, Load (LL) · Load, Store (LS)

如果某个 barrier 可以保证 Store,Load 不被乱序 执行,则我们称其为 SL memory barrier(SLB)。

类似的我们可以定义出 SSB, LLB, LSB。拿之前的例子来看,为了保证执行顺序 , 我们可

以插入一个 SSB。int port, action;void forbar(int base){ action = 4; __asm__("SSB"); port = base + 3;}

这样我们可以保证两个 store 是按顺序执行的。c++11 以及 erlang 定义的模型比这个要更复杂,

大概有以下:· full memory barrier(mb)· release memory barrier(relb)· acquire memory barrier(acqb)· write memory barrier(wb)· read memory barrier(rb)· data dependency memory barrier(ddrb)

是不是有点懵……要理解这些模型得先把我们上面的简单模型再

细化一下,虽然存储指令只有 store 和 load 两种,两两组合也确实是 4 种,但我们实际指令里的序列长度可不是 2,而是非常非常大的。

因 此 实 际 的 规 范 并 不 是 用 SLB, SSB 这 种 简单 方 式 而 是 根 据 更 抽 象 的 语 义 来 定 义 memory barrier(SLB,SSB 这 种 一 般 是 在 讨 论 CPU 级 别 的barrier 时出现 )。

比如 relb 这个的语义是 release write memory barrier, 要 保 护 的 序 列 是:“anymemops, relb, action”这种序列,这个 anymemops 可以是多个store 和 load 的任意组合,可以保证在执行关键操作前一定可以得到最新的内存信息。

而 acqb 就是 acquire load memory barrier,要保护的序列是“action, acqb, anymemops”,可以保证执行关键操作后的 anymemops 是基于最新的内存数据。

顺便提一句,这个 action 往往就是各种 atomic operation,但并非一定是。这也是 memory barrier容易与原子操作混淆的一个原因。

硬件设计者为了效率所以就让程序员必须得处理所有的乱序组合吗 ? 并不是的。比如 x86 下我们只会遇到操作内存时 (IO) 的 load, store 被乱序执行了,其他的一些序列是由 CPU 来确保不会乱序的。

CPU 内部是通过类似 replay trap( 不知道怎么翻译,属于 DEC alpha 内的术语 ) 机制来实现硬件上

Page 59: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Sharing

57www.deepin.com

的 barrier。也就是实际上所有的 store,load 都会被乱序执

行 ( 并不准确 ),但 CPU 内部在”预取指”模块里会做类似这种操作。 若正在执行的是一条 load/store指 令, 则, 检 测 指 令 buffer 里 后 面 的 指 令 是 否 是store/load。若是且检测到乱序情况则将正在执行的指令终止掉,重新进行指令读取操作。

步骤 3 是一个非常影响性能的操作。但整个过程实际上还涉及到 load/store 的具体

地址是否相同等维度的数据,因此整个组合也并非简单的 2×2=4 种情况。

类似 Java,C++ 等为了移植性无法绑定到一个具体的平台,但为了效率又想尽量能把内部结构与实际硬件一一对应起来。

因此软件规范上只能尽可能把经常遇到的模式都抽象出来定义出一个即灵活又完整的 barrier api。

那 有 么 有 简 单 一 点 的 方 式 呢 ? 软 件 上, 任何 时 候 都 暴 力 的 使 用 full barrier, 也 就 是 不 细 分barrier 类型,全部同步。 硬件上,也不要去管什么lfence,sfence 全部暴力的使用 full barrier。

实际上不论是软件还是硬件大部分实现上都没有规范里说的那么细化。比如 gtk,Go 的 atomic 相关操作全部都是 full barrier 语义,alpha 也只提供了一个 full barrier 的指令,x86-64 也是在 sse2 之后才有细分的非 full barrier 指令。

插入一个 kernel 里的概念,kernel 里对 barrier的定义是分 SMP 和非 SMP 前缀的,区别是在逻辑上前者保证的是 CPU 之间的范围 (cache,内存 ),后者是保证整个系统 ( 除了前者还有外设等等 )。虽然实际上他们在某些硬件下是完全相等的。

再插入一个概念,C 语言里的 volatile 和这里讨论的是没有关系的,它的作用只是让 compiler 不要做乱序处理,也就是其到一个 compiler memory barrier 的作用。而 Java 里的 volatile 则是会转换到实际的 CPU 指令上。

相关概念很容易混淆,在不理解时一定要提醒下自己 barrier 为什么出现,以及去理解这个 barrier所处理的问题范围是什么 (cache,还是 memory, 还是 device,还是虚拟机内的 ),以及要保护的是什么操作序列。

对国产架构的影响了解这块主要是因为在移植 erlang 到申威架构

时遇到了类似问题,因此整理了一下这方面的概念。x86 在硬件上已经提供了很强的 barrier 保证了,

而其他几个 CPU 都只提供了很弱的 barrier。因此造成国产架构下一个非常普遍的问题。很多软件在 x86 下工作的好好的,但移植到飞

腾 (arm),龙芯 (mips),申威上就出现各种各样的问题。有些时候并非这些 CPU 的问题,而是他们的内存模型不同。

因此在一些驱动代码里,虽然代码都是和相同的外设打交道,但不同 CPU 下却有不同结果,可能就是原始代码是在 x86 下编写测试的,驱动代码又是大量和内存以及设备寄存器进行交互的,很多bug 是没法在 x86 下触发的,但在其他平台下就很容易触发了。

而仅仅我个人就至少遇到了飞腾,申威,龙芯在这方面的实际问题。

举一个能说的例子,龙芯官网的 FAQ 上有提到 3A/3B 的 ll 指令存在缺陷必须在前面放一个 sync指 令 ( 实 际 就 是 一 个 产 生 full barrier 的 指 令 ),但 在 deepin 上 用 gcc 的 atomic builtin 来 生 成acqb,relb,mb 等情况下的操作时候会发现不论什么barrier 类型,后面都会被强制生成一个 sync 指令。

部分 ll 指令前会出现两个 sync 指令。问 题 1 会 导 致 所 有 的 relb 语 言 上 升 到 了 full

barrier,问题 2 会额外增加一个 sync 等待操作。

Page 60: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·讲坛

58 2019.01

记一次 SPECjvm2008 问题排查 深度科技 武汉公司 研发中心 / 文

问题概述前段时间在对系统进行性能测试的时候,我

们遇到了一个 SPECjvm2008 的问题。先介绍下,SPECjvm2008 是 当 前 测 试 JVM(Java 虚 拟 机,Java Virtual Machine)性能最常见的工具,它由多个测试用例组成。另外,SPECjvm2008 还是一个开源软件,因此在发生问题的时候是可以结合它的源码进行联合诊断的。

当时遇到的问题是在 SPECjvm2008 里有一个测试用例叫 startup.compiler.sunflow,在运行这个测试用例的时候,SPECjvm2008 会停止在测试中途,当时等了两天 SPECjvm2008 仍处于暂停状态,没有任何运行下去的迹象。

问题分析解决问题的第一个步骤就是要重现问题,如果

不能重现问题,首先是难以找到问题的症结所在,其次是即使自以为解决了问题,由于无法重现问题,也难以进行验证。

在 此 处, 其 测 试 用 例 的 运 行 方 法 是 进 入SPECjvm2008 的安装目录,然后运行:

java -jar SPECjvm2008.jar -ikv startup.compiler.sunflow

运行的结果如下(有部分删节):

SPECjvm2008 Base Properties file: none Benchmarks: startup.compiler.sunflow

--- --- --- --- --- --- --- --- ---

Benchmark: check Run mode: static run Test type: functional Threads: 1 Iterations: 1 Run length: 1 operation

Iteration 1 (1 operation) begins: Sun Aug 12 11:42:14 SGT 2018Iteration 1 (1 operation) ends: Sun Aug 12 11:42:15 SGT 2018Iteration 1 (1 operation) result: PASSED

Valid run!

--- --- --- --- --- --- --- --- ---

Benchmark: startup.compiler.sunflow Run mode: static run Test type: single Threads: 1 Iterations: 1 Run length: 1 operation

Iteration 1 (1 operation) begins: Sun Aug 12 11:42:15 SGT 2018

此时已经进入了暂停状态,因此我们可以再开一个终端,检查对应的进程信息。首先需要通过 ps得到进程号与进程状态,如下:

raphael@raphael-pc:~/specjvm2008$ ps aux | grep --color javaraphael 2910 0.2 2.8 2387284 54540 pts/0 Sl+ 11:42 0:01 java -jar SPECjvm2008.jar -ikv startup.compiler.sunflowraphael 2924 2.2 7.8 2388288 151748 pts/0 Sl+ 11:42 0:11 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -classpath SPECjvm2008.jar -Dspecjvm.home.dir=. spec.harness.Launch -bt 1 -ops 1 -crf false -ict -icsv -ss SMALL compiler.sunflowraphael 2957 0.0 0.0 14532 1020 pts/1 S+ 11:50 0:00 grep --color java

可以看到对应的原始进程的进程号是 2910,状态为 Sl+,直接测试进程的进程号是 2924,状态为Sl+。首先可以明确的是进程状态为 Sl+ 表示此进程处于休眠状态(S,即进程陷入了内核态未返回,但是可以接收信号,如果是 D 的话则表示陷入了内核态未返回,而且不能接受信号,如果是 R 的话表示

Page 61: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Sharing

59www.deepin.com

仍处于用户态可运行状态),多线程(l),而且是前台进程(+)。以上状态可以通过 man ps 得到。

既 然 进 程 陷 入 了 内 核 未 返 回, 则 可 以 通 过 /proc/#pid/syscall 得到对应陷入内核前调用的系统调用信息。此时我们运行 cat /proc/2924/syscall 可以看到如下信息:

202 0x7f88e22509d0 0x0 0xb6e 0x0 0xca 0x7f88e22509d0 0x7ffd018c7690 0x7f88e1e3f6bd

通过 man proc 得知,上述文件中第一个 202表示对应的系统调用号(syscall number),其后六个参数表示对应的系统调用参数的寄存器信息,最后两个参数表示应用程序用户态对应线程的栈指针与指令寄存器值。

要想得知系统调用号对应的系统调用名称,可以查找对应架构的 unistd.h 头文件,例如我们测试的机器架构为 x86_64,那么可以打开 unistd_64.h,查找 202。如果希望通过命令直接查找,可以安装auditd 包,运行 ausyscall 即可,如下:

raphael@raphael-pc:~/specjvm2008$ sudo apt-get install auditdraphael@raphael-pc:~/specjvm2008$ ausyscall 202futex

可 以 看 到 在 x86_64 架 构 下,202 号 系 统 调 用即 为 futex。 但 是 futex 是 一 个 非 常 常 用 的 系 统 调用,被广泛用于 pthread 库同步机制的实现,以及POSIX 信号量的实现等诸多地方,因此仅仅得知进程调用 futex 陷入了内核只能得知进程在等待某个共享锁,这其实是进程陷入 S 状态最常见的情况,但是在这里难以判断是谁导致的共享锁被占用,从而使得进程进入等待状态,也难以解决问题。

此时,我们可以尝试查看下此进程的各个线程,首先各个进程的线程可以通过 ls /proc/#pid/task 得到,然后通过对每个线程进行 /proc/#pid/syscall 的查看,可以发现某个线程的 syscall 不再是 futex 了,

如下:

raphael@raphael-pc:~/specjvm2008$ ls /proc/2924/task2924 2926 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937raphael@raphael-pc:~/specjvm2008$ cat /proc/2937/syscall1 0x2 0x7f88dcd6fa60 0x1c 0x46 0x7f88dcd6fa60 0xec901d70 0x7f88dcd6f9f0 0x7f88e1e471ed

此时 2937 号线程陷入了 1 号系统调用,经过ausyscall 可 以 知 道 1 号 系 统 调 用 即 为 write。 而man write 可以得知其需要三个参数,分别是文件描述符、待写入的缓存区指针,以及对应缓存区的大小。在这里文件描述符为 2(0x2),缓存区指针是 0x7f88dcd6fa60, 缓 存 区 大 小 是 28(0x1c)。而 2 号文件描述符是标准错误输出(stderr),可见2937 号线程调用 write 向标准错误输出输出的时候没有返回,这是一个比较少见的情况。我们可以继续深入下内核看看是怎么回事,如下:

raphael@raphael-pc:~/specjvm2008$ cat /proc/2937/stack[<ffffffff811e092c>] pipe_wait+0x6c/0xb0[<ffffffff810b6a20>] autoremove_wake_function+0x0/0x40[<ffffffff811e0a90>] pipe_write+0xc0/0x3f0[<ffffffff811d8284>] new_sync_write+0xa4/0xf0[<ffffffff811d8c34>] vfs_write+0xa4/0x1a0[<ffffffff811d98c2>] SyS_write+0x52/0xc0[<ffffffff81593d32>] system_call_fast_compare_end+0xc/0x67[<ffffffffffffffff>] 0xffffffffffffffff70

可 以 发 现 在 内 核 里 进 程 被 pipe_wait/pipe_write 堵塞住了,即在写管道的时候被堵塞了。那么,究竟什么情况会导致进程向 stderr 写数据,但是被管道堵住了呢?比较常见的显然是进程的 stderr 被重定向了,而且被重定向的 stder 管道没有被读取,或者读取速度过慢导致了进程被堵塞,而父进程应该是没有读取 stderr,但是又在等待程序运行完毕,形成了一个死锁,所以造成了测试程序无法继续运行下去。

下面,我们还可以看看 0x7f88dcd6fa60 对应的具体是什么数据。我们当然可以通过 gdb 进入进程

Page 62: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·讲坛

60 2019.01

查看数据,不过还有更轻量级的方法,那就是读取 /proc/#pid/mem 文件。这个文件对应的是进程的内存地址空间的所有内存的内容,读取这个虚拟文件即可获取到对应的进程内存数据。

不过如果你直接读取此文件会得到如下的错误:

raphael@raphael-pc:~/specjvm2008$ cat /proc/2937/mem cat: /proc/2937/mem: 输入 / 输出错误

请注意,这并不是权限错误,换了 root 来 cat此文件一样会发生上述错误。要是大家对 C 语言编程与进程的地址空间有了解,就可以知道,虚拟文件的首字节显然对应的就是进程地址空间中地址为 0的内存。但是我们都知道,进程地址空间中从 0 开始的一大段地址都是不可访问的,因此,如果直接读取 mem 文件的开始数据,对应其实就是访问了进程地址空间从 0 开始的对应地址空间,由于这段地址没有做任何映射,当然会产生访问错误了。

因此,读取 mem 文件只能使用 open、lseek、read 的方式进行。由于 hexdump -s 在此处不适用(大家可以试下想想为什么),因此可以写一个简单的C 程序即可,如下:

raphael@raphael-pc:~/specjvm2008$ ./rd /proc/2937/mem 140225797356128 28[28(max 28)]: ' 建议升级此编译器。'

可以看到 2937 号进程正在试图向 stderr 输出“建议升级此编译器”的字样。

因此,本次 SPECjvm2008 事件的原因基本已经清楚了:

1. 父进程启动子进程进行编译(毕竟此测试用例是 compiler.sunflow);

2. 父进程重定向了子进程的 stderr,但是没有读取子进程的 stderr,并使用 futex 等待子进程结束;

3. 子进程在编译过程中产生了大量的警告信息,通过 stderr 输出;

4. 由于父进程没有读取子进程的 stderr,因此子进程的 stderr 管道被写满以后,无法继续运行,被堵塞在 write 系统调用处;

5. 由于子进程被堵塞了,因此父进程也无法等到子进程的结束,陷入了互相等待。

验证问题下面是对 SPECjvm2008 的源码进行分析后得到

的一个验证方式,直接运行对应的测试用例(没有被重定向过的),可以看到大量的警告信息,如下:

raphael@raphael-pc:~/specjvm2008$ java -classpath SPECjvm2008.jar spec.benchmarks.compiler.sunflow.Main警告:spec.benchmarks.compiler.SpecFileManager$CachedFileObject@43a0cee9: 主版本 52 比 51 新,此编译器支持最新的主版本。建议升级此编译器。警 告:spec.benchmarks.compiler.SpecFileManager$CachedFileObject@710726a3: 主版本 52 比 51 新,此编译器支持最新的主版本。建议升级此编译器。警告:spec.benchmarks.compiler.SpecFileManager$CachedFileObject@646007f4: 主版本 52 比 51 新,此编译器支持最新的主版本。建议升级此编译器。……

如果在运行上述命令时加上 2>/dev/null 将标准错误输出重定向到空设备,就看不到上述警告信息了,再次验证了之前结论的正确性。

为了进一步验证此问题,我们可以开发一个父进程的程序与子进程的程序。在父进程里对子进程的标准输出与标准错误输出进行重定向,但是仅读取子进程的标准输出。在子进程中则不断向 stdout与 stderr 输出大量信息,同时通过日志文件记录日志。看看此时程序是否会停住,以及在停住的时候,其 syscall、stack 是否与之前的进程一致。除此之外,还可以进行统计,查看当向 stderr 写入了多少字节后,管道会被堵塞。

Page 63: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Sharing

61www.deepin.com

父进程(parent.c)源码如下:

1 #include <stdio.h> 2 #include <unistd.h> 3 4 int main(int argc, char* argv[]) 5 { 6 int outs[2], errs[2]; 7 int ret = pipe(outs); 8 if (ret) { 9 perror("pipe");10 return ret;11 }12 13 ret = pipe(errs);14 if (ret) {15 close(outs[0]);16 close(outs[1]);17 perror("pipe2");18 return ret;19 }20 21 pid_t pid = fork();22 if (pid < 0) { // fail23 close(errs[0]);24 close(errs[1]);25 close(outs[0]);26 close(outs[1]);27 perror("fork");28 return pid;29 } else if (pid == 0) { // child30 close(errs[0]);31 close(outs[0]);32 dup2(errs[1], 2);33 dup2(outs[1], 1);34 execl("./child", "child", 0);35 } else { // parent36 close(errs[1]);37 close(outs[1]);38 char buf[80];39 while (1) {40 size_t n = read(outs[0], buf, sizeof(buf)-1);41 if (n <= 0)42 break;43 buf[n] = 0;44 printf("%s", buf);45 }46 close(errs[0]);47 close(outs[0]);48 }49 }

父进程在程序起始阶段就打开了两对管道 outs与 errs,分别用于子进程的 stdout 与 stderr。接下来,父进程调用 fork,在子进程的分支里(pid == 0 时)关闭了管道的输出,并将对应管道的输入与文件描

述符 1(stdout)以及 2(stderr)关联,最后调用了 execl 启动 ./child 子进程。在父进程分支里(else时)关闭了管道的输入,循环读取子进程的 outs[0]管道(对应子进程的 stdout)并将其输出打印出来,但是完全不处理子进程的 stderr 管道。

子进程(child.c)源代码如下:

1 #define _GNU_SOURCE

2 3 #include <stdio.h> 4 #include <fcntl.h> 5 6 int main() 7 { 8 int written = 0; 9 printf("stderr pipe size: %ld\n", fcntl(2, F_GETPIPE_SZ));10 FILE* fp = fopen("child.log", "w");11 setvbuf(fp, 0, _IONBF, 0);12 for (int j = 1; j <= 10000; j++) {13 written += fprintf(stderr, "this is a very long long long long long error, and the error number is #%d\n", j*100 + 1);14 printf("we are making progress... haha ;) and the progress is %d, w: %d\n", j*1000, written);15 fprintf(fp, "progress %d, w: %d\n", j, written);16 // fflush(fp);17 }18 fclose(fp);19 }

子进程首先打印 2 号描述符管道的容量(通过fcntl 函数),继而打开了日志文件,然后进行了一个大循环,先向 stderr 输出,如果输出成功则记录对应的累计输出字节数,然后向 stdout 输出,最后向日志文件输出。

下面是执行的结果:

raphael@raphael-pc:~/temp/redirect$ ./parentstderr pipe size: 65536we are making progress... haha ;) and the progress is 1000, w: 76we are making progress... haha ;) and the progress is 2000, w: 152we are making progress... haha ;) and the progress is 3000, w: 228……we are making progress... haha ;) and the progress is 809000, w:

Page 64: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·讲坛

62 2019.01

62994we are making progress... haha ;) and the progress is 810000, w: 63072

即 2 号文件描述符的管道大小为 65536,即 64 KB。对应大约向stderr 写了 63072 字节后子进程就停滞了,此时查看 child.log日志文件:

raphael@raphael-pc:~/temp/redirect$ tail -5 child.logprogress 830, w: 64632progress 831, w: 64710progress 832, w: 64788progress 833, w: 64866progress 834, w: 64944

可以看到日志文件更新得更快一些,在写入了64944 字节后就无法向 stderr 写入了。

对应查看 parent 与 child 的进程状态:

raphael@raphael-pc:~/temp/redirect$ cat /proc/`pidof child`/syscall1 0x2 0x7ffdde851db0 0x4e 0x64 0x7fef4a0a5700 0x4e 0x7ffdde851be8 0x7fef49be5620raphael@raphael-pc:~/temp/redirect$ cat /proc/`pidof child`/stack[<ffffffff811e092c>] pipe_wait+0x6c/0xb0[<ffffffff810b6a20>] autoremove_wake_function+0x0/0x40[<ffffffff811e0a90>] pipe_write+0xc0/0x3f0[<ffffffff811d8284>] new_sync_write+0xa4/0xf0[<ffffffff811d8c34>] vfs_write+0xa4/0x1a0[<ffffffff811d98c2>] SyS_write+0x52/0xc0[<ffffffff81593d32>] system_call_fast_compare_end+0xc/0x67[<ffffffffffffffff>] 0xffffffffffffffffraphael@raphael-pc:~/temp/redirect$ cat /proc/`pidof parent`/syscall0 0x3 0x7ffe6c91a220 0x4f 0x73 0x7ffe6c91a220 0x32 0x7ffe6c91a208 0x7fe00abd05c0raphael@raphael-pc:~/temp/redirect$ cat /proc/`pidof parent`/stack[<ffffffff811e092c>] pipe_wait+0x6c/0xb0[<ffffffff810b6a20>] autoremove_wake_function+0x0/0x40[<ffffffff811e0fe1>] pipe_read+0x221/0x350[<ffffffff811d84fd>] new_sync_read+0x9d/0xe0[<ffffffff811d8af1>] vfs_read+0x81/0x120[<ffffffff811d9802>] SyS_read+0x52/0xc0[<ffffffff81593d32>] system_call_fast_compare_end+0xc/0x67[<ffffffffffffffff>] 0xffffffffffffffff

可以看到子进程状态与之前 SPECjvm2008 测试时遇到问题时进程的状态是一致了,再次验证了我们的猜想。但是父进程则有所不同,这次父进程是堵塞在 read 系统调用了,应该是堵塞在对子进程 stdout 管道的读取上。实际上,我们还参考

SPECjvm2008 的源码开发了一个 Java 程序来验证,下面是主程序(Main.java)的源代码:

1 package org.deepin;

2 3 public class Main { 4 public static void go() throws Exception { 5 Runtime rt = Runtime.getRuntime(); 6 String exe = "./child"; 7 Process p = rt.exec(exe); 8 MainOutput out = new MainOutput(p.getInputStream()); 9 out.start();10 out.join();11 p.waitFor();12 }13 14 public static void main(String args[]) {15 System.out.println("hello, world");16 try {17 go();18 } catch(Exception e) {19 e.printStackTrace();20 }21 }22 }

下 面 是 对 通 过 管 道 读 取 子 进 程 输 出 的 程 序(MainOutput.java)的源代码:

1 package org.deepin; 2 3 import java.io.InputStream; 4 import java.io.BufferedInputStream; 5 6 public class MainOutput extends Thread { 7 InputStream input; 8 9 public void run() {10 int num;11 byte[] buf = new byte[80];1 2 B u f f e r e d I n p u t S t r e a m b i s = n e w BufferedInputStream(input);13 try {14 while ((num = bis.read(buf)) > 0) {15 String line = new String(buf, 0, num);16 System.out.print(line);17 }18 } catch(Exception e) {19 e.printStackTrace();20 }21 }22 23 public MainOutput(InputStream in) {24 this.input = in;25 }26 }

Page 65: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Sharing

63www.deepin.com

下面是对应的父进程的 syscall 与 stack。

raphael@raphael-pc:~/temp/redirect$ ps aux | grep --color javaraphael 10771 4.8 1.5 2384988 30288 pts/0 Sl+ 14:41 0:00 java -classpath . org.deepin.Mainraphael 10785 0.0 0.0 14532 976 pts/1 S+ 14:41 0:00 grep --color javaraphael@raphael-pc:~/temp/redirect$ cat /proc/10771/syscall202 0x7f12c5fbe9d0 0x0 0x2a14 0x0 0xca 0x7f12c5fbe9d0 0x7ffec6e366b0 0x7f12c5bad6bdraphael@raphael-pc:~/temp/redirect$ cat /proc/10771/stack[<ffffffff810ee1ba>] futex_wait_queue_me+0xba/0x110[<ffffffff810ee4a5>] futex_wait+0x105/0x250[<ffffffff810bb801>] __raw_callee_save___pv_queued_spin_unlock+0x11/0x20[<ffffffff810bb801>] __raw_callee_save___pv_queued_spin_unlock+0x11/0x20[<ffffffff810a8786>] update_curr+0xb6/0x130[<ffffffff810f04d9>] do_futex+0x149/0xb10[<ffffffff810a8bf0>] check_preempt_wakeup+0xe0/0x1e0[<ffffffff810bb801>] __raw_callee_save___pv_queued_spin_unlock+0x11/0x20[<ffffffff810bb801>] __raw_callee_save___pv_queued_spin_unlock+0x11/0x20[<ffffffff810f0f1f>] SyS_futex+0x7f/0x170[<ffffffff81003691>] syscall_slow_exit_work+0xc1/0xd0[<ffffffff81593d32>] system_call_fast_compare_end+0xc/0x67[<ffffffffffffffff>] 0xffffffffffffffff

可见与 SPECjvm2008 中父进程的表现完全一致,子进程的表现也一致了。

解决问题从 上 述 分 析 看 来, 这 个 问 题 应 该 是

SPECjvm2008 的一个 bug,即父进程重定向了子进程的 stderr,但是却没有读取对应的数据,导致一旦出现大量的警告信息时,子进程对 stderr 的管道写入被堵塞,从而导致测试进程整个被停滞。

要解决问题主要有下面几个思路:1. 修改 SPECjvm2008 的代码,使得父进程除了

读取 stdout 之外,还需要读取 stderr,或者在编译的时候加入 -nowarn 选项,让 javac 不输出警告信息;

2. 修改 javac 的行为,让其不再输出警告信息;3. 修改系统的管道尺寸配置参数,让管道变大

一些,例如通过 ulimit 或者 sysctl;4. 修改内核代码,让管道变大一些(实际上内

核里写死了每个管道的缺省大小是 16 页,对于 x86来说每页为 4KB,对应大小即为 16x4 = 64KB);

显然第一个方法是正确的方法,其它方法都是暂时规避的方法。大家可以自行尝试一下,看看哪个方法是可行可用的。

小结在进程堵塞的时候,可以通过多种方法对进

程 进 行 调 试, 比 如 查 看 /proc/#/syscall、/proc/#/stack,比如使用 gdb,比如使用 strace。如果进程已经陷入了内核(状态为 S 或 D),通过 strace 查看到的信息是有限的,如果进程仍处于用户态(状态为 R),则通过 strace 是比较有效的,可以观察到进程是否在来回调用系统调用,通过 syscall/stack则不一定稳定。当然,若应用程序仅在用户态运行,通过 strace 就难以跟踪了,这个时候使用 gdb 可能是更好的方法。

此外,在问题解决过程中,可能会遇到不熟悉的技术,例如这里会用到 java,这个时候需要自己学习一下,相信半天的功夫就能初步能编译、运行和打印调试信息了,这对程序调试是非常有帮助的,所以也不能局限自己只在舒适区工作。因为对于操作系统来说,上面承接的应用程序是多种多样的,我们作为操作系统厂商,是无法挑选用户的应用程序的。其实,在解决这个问题的过程中,我还尝试过使用 jdb,但确实在解决问题的期间也没有学会,不过因为 SPECjvm2008 是开源的,因此后来也没有再尝试 jdb 了。

其实,在得知这个问题的时候已经有同事(如snyh 同学)做了很多探索,得到了很有用的结论。所以在这里只是把大家的探索和我自己做的一部分工作结合起来,进行了整理,当一个事后诸葛亮。希望能帮助大家在以后的调试工作中快速定位bug,做一个 bugfree 的程序猿 / 媛。

Page 66: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·伙伴

64 2019.01

Deepin 15.9: Desktop-Linux leicht gemacht

Von liane M. Dubowy / 文

Die chinesische Linux-Distribution Deepin 15.9 holt

Einsteiger da ab, wo sie stehen und räumt ihnen

viel Desktop-Spielraum ein.

中文 Linux 发行版 Deepin 15.9,他们站在新的视角,为用户提供了充足的桌面空间。

Die Linux-Distribution Deepin 15.9 richtet sich ganz

an Desktop-Anwender. Schon seit 2014 gibt es

das chinesische Linux-System auch in anderen

Sprachen, darunter auf Deutsch und Englisch.

Als Grundlage verwendet die Distribution Debian

Unstable und damit die Paketverwaltung apt,

bringt jedoch eine eigene Desktop-Umgebung und

reichlich eigene Tools mit.

Linux 发 行 版 Deepin 15.9 面 向 桌 面 用 户。 自2014 年起,中文 Linux 系统还提供其他语言版本,包括德语和英语。该发行版使用 Debian unstable 作为基础,使用 apt 作为包管理器,但是它带来了自

Page 67: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Cooperative Partner

65www.deepin.com

己的桌面环境和大量自主开发的工具。

Deep in 15 .9 nu t z t den Ke rne l 4 .15 . D ie

Unterstützung für Touchscreens wurde verbessert,

das System kennt jetzt verschiedene Gesten.

Auch eine Bildschirmtastatur ist nun dabei. Gefeilt

wurde außerdem an der Energieverwaltung und

dem Desktop. Dank Smart Mirror Switch in den

Update-Einstellungen soll Deepin 15.9 automatisch

den schnellsten Spiegelserver zum Download von

Updates kontaktieren.

Deepin 15.9 使用 4.15 版本的内核,改进了对触摸屏的支持,并且能够识别许多不同的手势。系统

还包括了一个屏幕键盘,内置了电源管理。由于在更新设置中提供的智能镜像切换机制,Deepin 15.9可以自动选择最快的镜像服务器以下载更新。

Eigener Weg auf dem Desktop自己的桌面环境Die von ih rem Dis t r ibu to r Wuhan Deep in

Technology eigens für Deepin entwickelte Desktop-

Umgebung Deepin Desktop Environment, oder kurz

DDE, basierte ursprünglich auf HTML5 und Webkit.

Mittlerweile wurde sie auf Qt5 portiert. Ohne viel

Mühe lassen sich viele Details des Desktops

anpassen.

Mehr Software installiert man in Deepin 15.9 über den Deepin Store. Die Systemeinstellungen öffnen sich anders als bei

vielen Distributionen in einer Seitenleiste.

可以通过 Deepin Store 在 Deepin 15.9 中安装更多软件。系统设置的打开方式与侧栏中的许多分配不同。

Page 68: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·伙伴

66 2019.01

由武汉深之度科技有限公司开发的 Deepin 桌面环境桌面环境(简称 DDE)最初基于 HTML5 和Webkit 技术。后来基于 Qt5 进行了重写,以便可以调整桌面的许多细节。

Schon beim ersten Start wird abgefragt, ob man

lieber den "Designer Mode" mit einem kleinen Dock

an der unteren Mitte des Bildschirms oder eine

über die ganze Bildschirmbreite reichende Leiste

haben möchte.

在第一次启动时,系统会询问您是否更愿意使用“时尚模式”,该模式会在屏幕底部中央显示一个 dock,或者使用高效模式,在屏幕底部显示为一个占满屏幕宽度的任务栏。

Dock oder Leiste können an allen vier Seiten des

Bildschirms platziert werden. Vier verschiedene

Icon-Varianten stehen ebenso zur Wahl wie ein

dunkles und ein helles Theme. Mit wenigen Klicks

bekommt der Desktop so ein anderes Gesicht.

dock 可以放置在屏幕的四个侧面。提供四种不同的图标样式以及黑暗和明亮主题。只需点击几下,桌面就会变得与众不同。

Die install ierten Anwendungen zeigt Deepin

wahlweise als grobes Raster ähnlich wie bei

Gnome oder als klassisches Anwendungsmenü

mit Suchfunktion und Kategorien (im sogenannten

"Mini-Modus").

已 安 装 的 Deepin 应 用 程 序 显 示 为 类 似 于Gnome 的展现形式或者是具有搜索功能和应用分类的经典应用程序菜单(在所谓的“迷你模式”中)。

Software selbstgestrickt软件自编织Mit der in Deepin 15.9 vorinstallierten kleinen

Software-Auswahl lassen sich Büroaufgaben

erledigen und Mails schreiben, man kann im

Internet surfen, Musik und Videos abspielen,

einen Screencast aufzeichen oder Bildschirmfotos

Page 69: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Cooperative Partner

67www.deepin.com

anfertigen, Bilder und PDF-Dokumente ansehen

und einiges mehr.

通过 Deepin 15.9 中预装的软件,您可以执行办公任务和写邮件,上网,播放音乐和视频,录制截屏或截屏,查看图片和 PDF 文档等等。

Standardbrowser ist Google Chrome, Mails

l i es t Thunderb i rd . A l s Büro -So f tware fü r

Textverarbei tung, Tabel lenkalku lat ion und

Präsenta t ionen is t WPS Off i cedabe i . Be i

allen anderen Tools handelt es sich meist um

Eigenentwicklungen. Weitere Software aus den

Paketquellen werden über den Deepin Store

installiert.

默认浏览器是 Google Chrome,邮件客户端是Thunderbird。 WPS Office 是用于文字处理,电子表格和演示文稿的办公软件。所有其他工具大多是自行开发的。通过 Deepin Store 安装来安装更多来自其他地方的软件。

Einsteigerfreundlich初学者友好Die grafische Installationsroutine von Deepin hilft

bei der Installation des Systems auf der Festplatte.

Einige Desktop-Einstellungen werden beim ersten

Start abgefragt, ein kurzes Tutorial-Video startet

automatisch und zeigt die ersten Schritte auf dem

Desktop. Weitere Hilfe bietet das mitgelieferte

Handbuch, das immerhin auf Englisch vorliegt.

Deepin 15.9 steht als ISO-Image für 64-Bit-x86-

Systeme zum Download bereit, das direkt den

Installer startet. (lmd)

Deepin 的图形安装程序有助于将系统安装在硬盘上。首次启动时会进行某些桌面设置,自动启动简短教程视频并显示桌面上的第一步。可以在随附的手册中找到进一步的帮助,该手册至少也提供英文版本。 Deepin 15.9 可作为 64 位 x86 系统的ISO 映像下载,并直接启动安装程序。

Page 70: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·伙伴

68 2019.01

Meet The Linux Desktop That Blows Away Windows 10 And MacOS

As a fairly new desktop Linux user I've been a

distro-hopping fanatic, exploring the functionality

and key differences between the array of excellent

options out there. While a "forever distro" is the

ultimate goal, the journey has been exciting and

educational. Recently my Linux adventures led me

to Deepin, an OS that captured my attention and

boasts a few key ingredients I fell in love with.

作为一个刚接触 Linux 桌面的新用户,我对各个发行版十分入迷,了解了一些优秀发行版的功能和主要区别。我的最终目标是找到“最好的发行版”,这个探索的过程很精彩,并让我有很多收获。最近在了解 Linux 时我发现了 deepin(深度操作系统),它引起了我的注意,其中有一些关键要素我非常喜欢。

environment, meaning it's possible to install it

as your default "look and feel" on a wide range

of distributions (an alternative word for desktop

operating system in the Linux world).

像 许 多 其 他 Linux 操 作 系 统, 如 Ubuntu 和elementary OS 一 样,deepin 是 基 于 Debian 的 操作系统。deepin 有一个独立的桌面环境,意味着可以按照您默认的“外观和感觉”,把它安装在各种发行版(Linux 中桌面操作系统的另一名称)上。

Deepin does something unique that I haven't seen

in any other Linux distribution I've tried. Or for that

matter, in any version of macOS or Windows. This

compels me to describe it as simultaneously sexy

and sensible. I know, it's an unusual combination!

deepin 的 独 特 之 处, 我 在 任 何 其 他 Linux 发行 版 中 都 没 有 体 验 过, 在 任 何 版 本 的 macOS 或Windows 中也没有见过,我不得不承认它既迷人又实用,尽管我知道这样的描述很不寻常!

I 've already written about how intuit ive the

installation process is, and the animated welcome

video that greets you on the first boot manages

to visually and succinctly introduce the various

features of the OS. A far cry from macOS, and

Jason Evangelho / 文

Like many other Linux operating systems such as

Ubuntuand elementary OS, Deepin is based on

Debian. But Deepin is also a standalone desktop

Page 71: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Cooperative Partner

69www.deepin.com

especially from Windows 10 with its endless

screens of setup text and nags.

deepin 的安装过程非常直观,在第一次启动时的“欢迎”动画视频中,形象简明地介绍了操作系统的各种功能,与 macOS 完全不同,更没有Windows 10 大量的设置文本和唠叨说明。

But let's get into what really shines once Deepin is

installed.

现在让我们在安装 deepin 后,深入了解其亮点。

The Control Center控制中心

to open up in a new window -- or even multiple

windows. It's here that Deepin sets itself apart in a

beautiful way.

我们预期在一个新窗口,甚至是多个窗口中进行传统的系统设置,在这一点上,deepin 很巧妙地凸显了它的与众不同。

Every major setting you need to manage or tweak

your operating system exists within the Deepin

control center, accessible by clicking an icon in the

dock or taskbar. Doing so presents a translucent sidebar that slides out from the right side of your

desktop. From here you can access account

management, default apps, network settings,

themes and fonts, power management, system

updates and everything else you'd expect.

深度控制中心含有管理或调整系统的全部主要设置,可单击任务栏中的图标访问它。点击图标后会有一个半透明的侧边栏从桌面的右侧滑入。从这里,您可以访问帐户管理、默认程序、网络设置、主题和字体、电源管理、系统更新以及您期望的所有其他内容。

Deepin's control center is integrated perfectly right

into the desktop, and it makes both macOS and

Windows 10 feel archaic by comparison. This is

especially true for people who enjoy a streamlined

desktop that stays out of your way.

深度控制中心完美地集成到桌面中,相比之下,macOS 和 Windows 10 显得过时了,对于喜欢简洁桌面的人来说尤其如此。

We've come to expect traditional system settings

Page 72: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·伙伴

70 2019.01

You can also rearrange the boot order of various

operating systems you have installed, and even

setup a VPN connection. All from this single

sidebar. No extraneous windows. And once you've

drilled down into a particular category, it's a snap to

access others by clicking the relevant icons on the

left and jumping directly to them.

您还可以对已安装的各个操作系统重新排列启动次序,或设置 VPN 连接,全部在这个侧边栏中设置,没有多余的窗口,如果您深入某一设置模块,点击左侧的相关图标,可以直接跳转,轻松访问其他设置模块。

The control center can also serve as your

notifications center. Just click the toggle on the

upper part of the sidebar and you'll switch to all of

your system and social notifications.

控制中心也可以作为您的通知中心,只需单击控制中心上部的切换按钮,即可切换到所有系统和社交通知。

Seeing the Deepin control center in motion really

drives home how elegant a solution it is. It's a

feature I was blissfully unaware of until I first used

it, and now I'm hooked. It's all very fluid and very

impressive.

动态的深度控制中心,确实显得更加美观,在第一次使用它之后,我才幸运地意识到这一特别之处,现在我非常喜欢,一切都非常流畅,令我印象深刻。

Fashion Mode and Efficient Mode时尚模式与高效模式

Deepin also does something that -- at least in

my experience -- often requires the installation

of a completely different desktop environment.

It offers fast-switching between "Fashion Mode"

and "Efficient Mode," effectively catering to people

(read: Mac and Windows users) with pre-existing

preferences on how their desktop should look and

function.

据我了解,deepin 无需另外安装系统,就能给用户一个完全不同的桌面环境,“时尚模式”和“高效模式”之间可以快速切换,有效地满足了人们(Mac和 Windows 用户)对桌面显示及其功能的习惯偏好。

Fashion Mode is most easily compared to macOS,

sporting a dock that's centered at the bottom of

your screen by default. It will also feel familiar to

Gnome or elementary OS desktop users. This

dock has a collapsible "system tray" as well which

shows notifications, volume controls and network

Page 73: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Cooperative Partner

71www.deepin.com

connections.

时 尚 模 式 与 macOS 相 似, 是 一 个 中 心 对 称的 默 认 处 于 屏 幕 底 部 的 任 务 栏。 这 与 Gnome 和elementary OS 的桌面类似,任务栏还有一个可折叠的“系统托盘”,显示通知,音量控制和网络连接。

I f you prefer a more Windows-l ike desktop

implementation, "Efficent Mode" is what you're

after. Simply right click in the dock, select it, and

then you'll be rocking a taskbar on the left and

system tray area on the right.

如果您更喜欢类似 Windows 的桌面,那么“高效模式”可以满足您的要求。只需右键单击任务栏,选择“高效模式”,然后您将看到左侧的任务栏和右侧的系统托盘区域。

In both modes these areas can be snapped into

the left, right and top of your screen. In both modes

you can easily adjust the sizing and whether or not

it auto-hides or stays locked onto the screen, as

well as activate or deactive any plugins or applets

you've installed with a simple right click.

在这两种模式下,任务栏都可以放置到屏幕的

左侧,右侧和顶部。您还可以轻松调整任务栏大小,设置是否自动隐藏或保持锁定在屏幕上,以及通过简单的右键单击,激活或停用您安装的任何插件或小程序。

Bonus Points: Selective Dark Mode深色模式

I won't spend too much time on this one, but it's

awesome. Like most modern operating systems,

Deepin has a global Dark Mode, but you can toggle

Dark Mode on or off on a per-app basis, too, just by

selecting it in the open window's menu.

与大多数现代操作系统一样,deepin 提供了全局深色模式,但您也可以在每个应用程序中打开或关闭深色模式,只需在窗口菜单中选择“深色主题”即可。

One more thing: even the Deepin System Monitor

is gorgeous.

Page 74: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·伙伴

72 2019.01

而且,深度系统监视器也十分漂亮。

The Linux Desktop: Elevated不断提升的 Linux 桌面

I use Linux for multiple reasons, and paramount

among them is freedom of choice. KDE Plasma

is polished, ridiculously extendible and speedy.

Gnome is sensible, attractive and minimalist

in nature. Budgie is gorgeous, lightweight and

complete out of the box. And all of those choices

are valid ones.

我使用 Linux 有很多原因,但最主要是因为能自由地选择。KDE Plasma 精致,扩展性强,运行快,Gnome 实用、美观、极简,Budgie 华丽、轻量,开箱即用,所有这些操作系统都能有效地工作。

What I love about Deepin is that it elevates the

perception of what a Linux desktop is capable of.

It brings with it some UI elements that could leave

even Apple's macOS developers drooling. And

when stacked against Windows 10, it's no contest.

Microsoft needs to go back to the drawing board.

我喜欢 deepin,因为它提升了对 Linux 桌面能力的认知。它的一些 UI 元素,甚至可以让苹果公司的 macOS 开发人员羡慕,跟 Windows 10 相比,结果显而易见,微软得回到画板前重新设计。

It's also very welcoming to new Linux users, and

that's something I personally appreciate. I haven't

needed a command line once, and it's just a joy to

use.

deepin 也非常欢迎新的 Linux 用户,我个人很欣赏这一点,使用过程也很开心,一次都不需要使用命令行。

Deepin Linux can be downloaded for free here, but

you can also get the Deepin desktop experience

in Manjaro Deepin, which I highly recommend.

That gives you the immense flexibility and software

availability of Arch Linux, but with the decidedly

beginner-friendly attitude of Deepin.

Deepin Linux 可以在官网免费下载,但您也可以在 Manjaro Deepin 体验 deepin 桌面环境,我强烈推荐后者,Manjaro Deepin 不仅有具备强大灵活性和软件可用性的 Arch Linux,还有对初学者十分友好的 deepin。

Beyond that there are several other Linux

distributions that serve up Deepin as their desktop

environment. Give one a try!

除 此 之 外, 还 有 其 他 几 个 Linux 发 行 版 将deepin 作为其桌面环境。您可以安装体验一下深度操作系统!

Page 75: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Cooperative Partner

73www.deepin.com

Deepin Builds a Better Linux Desktop

Deepin 15.8, released last month, is loaded

with more efficient layout tweaks that give the

distribution greater functionality and maturity.

2018 年 11 月发行的 deepin 15.8,布局调整得更为高效,使得该发行版的功能更加强大完善。

Deepin, based in China, shed its Ubuntu base

when with the 2015 release of version 15, which

favored Debian Linux. That brought numerous

subtle changes in the code base and software

roots. Ubuntu Linux itself is based on Debian.

来自中国的 deepin(深度操作系统),在 2015年发行了 deepin 15 版本,从基于 Ubuntu 迁移到基于 Debian Linux 进行开发。这给代码基础和软件root 带来了许多微妙的变化,而 Ubuntu Linux 本身就基于 Debian。

The chief distinguishing factor that accounts for

Deepin's growing popularity is its homegrown

Deepin Desktop Environment (DDE). One of the

more modern desktop environments, it is one of

the first Linux distros to take advantage of HTML 5

technology.

deepin 越来越受欢迎主要是因为其自主研发的深度桌面环境(DDE)。作为更现代的桌面环境,它是第一批利用 HTML 5 技术的 Linux 发行版之一。

Coinciding with the base affiliation change, the

developers, Deepin Technology, slightly changed

the distro's name. What was "Deepin Linux" is now

"deepin." That subtle rebranding is an attempt to

differentiate previous releases named "Deepin,"

"Linux Deepin" and "Hiweed GNU/Linux."

在系统基础发生变化的同时,其开发者深度科技,稍微变动了其发行版的名称。以前是“Deepin Linux” 现 在 改 为“deepin”。 微 小 的 品 牌 名 改动 是 为 了 区 分 以 前 的 版 本“Deepin”,“Linux Deepin”和“Hiweed GNU / Linux”。

Regardless of whether the name is rendered

as "deepin" or "Deepin Linux," this distro offers

users an eloquent, modern-themed Linux OS. It is

easy to use and comes with high-quality software

developed in-house.

不 论 名 字 是“deepin” 或“Deepin Linux”,该发行版都是一个有说服力的现代 Linux 操作系统,它易于使用,并提供高质量的深度原生应用。

Desktop Differences桌面之间的差异

The Deepin Desktop is offered in a widening

assortment of popular Linux desktops, but the best

user experience is found in this distro.

Jack M. Germain / 文

Page 76: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·伙伴

74 2019.01

深度桌面只是众多热门 Linux 桌面中的一个,但它有最好的用户体验。

Other distros running the Deepin Desktop miss

much of the unique integration you get in Deepin

Linux. DDE elsewhere usually lacks much of

the optimization and special optimized software

available through the Deepin software store.

移 植 了 深 度 桌 面 的 其 他 发 行 版 缺 失 了 很 多Deepin Linux 中特别集成的特性。其他地方的 DDE通常缺少很多系统优化,以及可以从深度应用商店获取的特别优化的软件。

Often, you get the software versions provided

by the distro you are running. The Linux distros

offering the Deepin Desktop are Archl inux,

Manjaro, Ubuntu, Gentoo, Fedora, Puppy Linux,

SparkyLinux, Antergos, Pardus and openSuse.

通 常 情 况 下, 您 得 到 的 软 件 来 自 于 您 使 用的 发 行 版, 移 植 了 深 度 桌 面 的 Linux 发 行 版 有Archlinux,Manjaro,Ubuntu,Gentoo,Fedora,Puppy Linux,SparkyLinux,Antergos,Pardus 和openSUSE。

Growing Pains Over历经成长之痛

I have reviewed earlier versions of Deepin Linux

along with other distros running the Deepin Desktop

Environment. This latest version is awesome.

上面回顾了 Deepin Linux 的早期版本,以及运

行深度桌面环境的其他发行版,它的最新版本很棒。

Any new desktop environment is a work in

progress. DDE started out with lofty goals but

mediocre execution. The Deepin desktop is now

well designed and very functional.

任何新的桌面环境都处于不断开发的过程中,深度桌面环境最初目标远大,却表现一般,但深度桌面现在设计得很好,非常实用。

Desktop shells largely are valued for how simple

they are to use and how functional they are for a

user's productivity. For me, the Cinnamon and the

Xfce desktops get high marks for both.

桌面外观的价值在很大程度上取决于其易用度以及实用度,以确保用户的工作效率,就我而言,Cinnamon 和 Xfce 桌面在两个方面的表现都很优秀。

DDE offers a third favorite option. I l ike its

modern design. Using it is intuitive. A user guide

presentation runs when you first load the desktop.

It is very helpful in getting started.

我第三喜欢的是深度桌面环境,我喜欢它的现代设计。界面非常直观,当您第一次加载桌面时,会自动演示使用指南,这在初次进入系统时非常有用。

DDE does not yet have every power user

feature I would like to see included, but it is

packed with enough personalization tweaks and

design improvements to make it a very workable

alternative.

Page 77: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Cooperative Partner

75www.deepin.com

深度桌面环境还没有我想要的所有高级用户功能,但它包含了足够的个性化调整以及持续改进的设计,使其成为一个非常可行的替代方案。

Digging Into Deepin's Design深挖 deepin 的设计

The Deepin Desktop design is snazzy yet simple to

use. Add its homegrown applications, and you get

an operating system that is tailored to the average

user.

深度桌面设计时髦且易于使用,安装深度原生应用,即可得到面向普通用户的操作系统。

The new desktop screen is prettier and less

cluttered. Annoying desklets, like a weather module

and volume sliders, are gone -- either removed or

relocated.

新桌面更加漂亮简洁,烦人的桌面插件,如天气模块和音量滑块,已经消失,或被移除,又或者被放置到其他地方。

I really like the new docking tray and boot theme.

In-house developed applications have been a

key ingredient in Deepin's growing popularity.

This latest release has some 30 improved native

applications that should bring a more beautiful and

efficient experience.

深度原生应用是 deepin 越来越受欢迎重要原因之一。此次的最新版本包含大约 30 个改进的深度原生应用,带来了更美观高效的体验。

Another strong point in Deepin's design is the

new collapsible dock tray. Deepin uses a dock bar

instead of the traditional bottom bar. When the dock

is set in the macOS-style mode, a button appears

that toggles a new dock tray element -- embed tray

icons in the dock.

deepin 设计的另一个亮点是新的可折叠任务栏托盘。deepin 使用 Dock 而不是传统的底部任务栏。当任务栏设置为 macOS 样式的高效模式时,会出现一个按钮,用来切换新的任务栏托盘元素——在任务栏中隐藏托盘图标。

The Dock offers a choice of fashion or efficient

modes. Fashion mode adds a hide/show button

in the dock tray. Click it to hide the icons in tray

area and save the dock space. The power button

is separated from the tray area to reduce the clicks

and avoid function confusion.

Dock 提供时尚模式和高效模式。时尚模式在任务栏托盘中添加了一个隐藏 / 显示按钮,单击它可隐藏托盘区中的图标,并节省任务栏空间,电源按钮与托盘区域分离,以减少点击并避免功能混淆。

In the Efficient mode, the right corner is set to

show desktop. The previous 'Show Desktop' icon

disappears.

在高效模式下,点击右边的角落可显示桌面。移除了之前的“显示桌面”图标。

Beyond Gnome比 Gnome 更优秀

Page 78: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·伙伴

76 2019.01

At first glance, you might think that DDE is a

remake of the refashioned GNOME 3 desktop

design. Looks can be deceiving. Click the first

icon at the left end of the dock bar to open the

applications menu.

乍 一 看, 您 可 能 会 认 为 DDE 是 重 新 设 计 的GNOME 3 桌面的翻版,我们可以通过单击任务栏左侧的第一个图标,打开应用程序菜单。

That is what starts to look like GNOME -- or

Android. You see a full-screen spread of rows

of applications. Click the second icon to see the

multitasking view, aka "virtual workspaces." In DDE

that panel drops down from the top center of the

screen, unlike GNOME's right screen panel.

它看起来像 GNOME 或 Android,您会看到满屏的一行行的应用程序,单击第二个图标查看多任务视图,即“虚拟工作区”,与 GNOME 的右侧面板不同,在 DDE 中,工作区面板从屏幕的顶部中心降下。

Deepin lets you set a different background image

for each virtual workspace These display in

the panel view as well. You can drag a running

application's mini image from the multitasking view

to another workspace. You also can right-click on

the top window border of a displayed app to move it

to another virtual workspace.

DDE 允许您为每个虚拟工作区设置不同的背景图像,它们同样显示在工作区视图中,在多任务视图下,您可以将正在运行的应用的预览图像拖动到另一个工作区。

Clicking the gear icon on the Dock bar slides out

the settings panel from the right edge of the screen.

The left vertical border of this panel holds a column

of icons, one for each settings category.

单击任务栏上的齿轮图标会从屏幕右边滑出设置面板。此面板包含两列图标,每个图标对应一个设置类别。

Click a vertical icon to open a settings display for

Deepin's multitasking feature shows thumbnails of

virtual workspaces via a display panel that hides

along the top edge of the screen. The main view

displays mini images of open windows on the

current workspace.

通过隐藏在屏幕顶部的显示面板,显示虚拟工作区的缩略图。主视图显示当前工作区中打开窗口的迷你图像。

Page 79: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Cooperative Partner

77www.deepin.com

the selected category. Or you can click in the panel

and scroll down or up for a continuous scrolling

through all settings.

单击图标即可显示该类设置项。或者单击进入控制面板,然后向下或向上连续滚动,来查看所有设置。

Stuffed With Software丰富多样的软件

Deepin-specific applications separate this distro

from most others. The developer has an impressive

inventory of in-house generated applications. This

release expands that inventory with more new titles

and revamps of many others.

深度家族的原生应用让该发行版与其他大多数发行版区别开来。深度科技研发了非常多的原生应用,deepin 15.8 包含了更多新应用,并优化了许多其他应用,使得深度家族更为壮大。

Here is a brief selection of what Deepin provides:

下面简单挑选了一些深度应用进行说明:

·Deepin Fi le Manager has a new Recent

bookmark in its sidebar. The latest release also

offers an optional dark theme.

· 深度文件管理器的侧边栏中有一个新的“最近使用”书签,最新版本还提供一个可选的深色主题,在新增功能之外,还进行了一些优化。

·Deepin Boot Maker has a simple interface to

make a deepin boot disk easily.

·深度启动盘制作工具的简单界面,让您轻松制作深度系统启动盘。

·Deepin Editor is a lightweight text editor with

some customized functions for composing text and

writing code.

·深度编辑器是一个可灵活定制部分功能的轻量级文本、代码编辑器。

·Deepin File Manager is an optimized revision

with added features.

·Deepin 文件管理器是一个带有附加功能的优化版本。

The Deepin Desktop has a slide-out control panel

that makes finding settings effortless. It uses a dock

bar instead of a traditional panel at the bottom of

the screen.

深度桌面的滑出式控制面板,让您轻松找到设置项。

Page 80: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·伙伴

78 2019.01

·Deepin Font Installer is a new tool for adding/

removing font files with simplified operations. It

shows font information, such as style, type, version,

copyright and description.

·深度字体安装器是一个可简单安装 / 卸载字体文件的小工具。它显示字体信息,例如样式、类型、版本、版权和描述。

·Deepin Repair is another new tool to fix some

issues in Deepin quickly, including hard disk

detecting, disk cleaning, DPKG repairing, boot

repairing, privilege repairing and password reset.l

·深度系统修复工具是一个快速修复深度系统中某些问题的工具,包括硬盘检测,磁盘清理,DPKG 修复,启动修复,权限修复和密码重置。

·Deepin's Graphics and Driver Manager app is

introduced in this release. It includes graphics card

hardware detection, graphics driver installation,

graphics driver solution switching, graphics driver

automatic recovery, and other functions.

·深度显卡驱动管理器包括显卡硬件探测,显卡驱动安装,显卡驱动方案切换,显卡驱动自动恢复等功能。

·Deepin Clone is yet another new tool that makes

it safe and easy to backup and restore the system.

It supports to clone, backup and restore disk or

partition. It works with Deepin Recovery to fix the

boot, partition and other problems.

·深度备份还原工具是一个安全可靠的系统备份和还原工具。它支持克隆,备份和还原磁盘或分区。与深度 Live 系统配合使用,用来修复启动,分区以及其他问题。

·The community-sponsored software store offers

about a thousand applications. Also available is a

new Deepin Store.

·社区版应用商店提供大约一千余款应用程序,深度应用商店同样进行了更新。

Deepin Store is a high-quality application store

to display, download, install, review and rate

applications. It includes the selections of popular

apps, new updates and hot topics. It supports one-

click installing, updating and uninstalling.

深度应用商店是一个集应用显示、下载、安装、评论和评分于一体的高品质应用商店,它精选了热门应用,最新上架和热门专题等栏目,支持一键安装,更新和卸载。

Getting It May Be Troublesome获取 deepin 可能会有点麻烦

One of the great advantages of many Linux distros

is the ability to test the distro in a live session.

This lets you try out the distro without making any

changes to your hard drive.

许多 Linux 发行版的一大优势是能够在 Live 模式中对其进行测试。在不对硬盘进行任何更改的情况下,您就可以试用发行版。

Unless you have a spare computer to perform a

full installation for testing, not being able to run a

live session is very risky. Glitches happen when

installing something untried.

Page 81: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Cooperative Partner

79www.deepin.com

除非您有备用电脑用来测试完整安装的系统,否则不运行 Live 模式就安装系统是非常冒险的。安装未经尝试的系统可能会发生小毛病。That is an issue with Deepin Linux. The ISO

does not boot into a live session. It is strictly for

installations only.

Deepin Linux 存在这个问题。它的 ISO 不会启动到 Live 模式。只能安装系统。

However, you can download a special boot tool to

allow you to install a live-session-capable version

of this release to a USB drive. Look for the live

session download option on the download page.

但您可以下载一个刻录工具,把该版本的 Live系统安装到 U 盘。Live 系统可在官网的下载页面下载。

However, you a lso wi l l have to download

the installation ISO. That poses yet another

inconvenience.

但您还得下载安装系统用的 ISO,又一个麻烦。

Time Factor Fail下载时间太长

The download time directly from the Deepin website

is horrendously slow. Download times posted take

as long as 18 hours. I checked back numerous

times with no faster delivery times.

直接从深度网站下载 ISO 会非常慢,有人下载ISO 长达 18 个小时,我尝试下载多次,速度也没有更快。

A better option is to use one of the streaming mirror

sites. The download times are literally minutes

instead of hours.

更好的方法是通过镜像分流站点下载,下载时间实际上只需要几分钟而不是几个小时。

You will find these alternative download sites at the

bottom center of the download screen. Hover your

mouse pointer over the half-dozen symbols and

look at the URL displayed.

在下载页面的底部中间找到这些替代的下载站。将鼠标指针悬停在图标上,查看下载链接。

Tip: You'll only find the installation ISO on these

secondary download sites. The boot tool is

available only from the Deepin website.

说明:您只能在这些辅助下载站上下载 ISO。深度启动盘制作工具也只能从深度官网下载。

Installing It安装

The installation routine is modern and classy. The

process is GUI-based (graphical user interface)

rather than text-based or command line-based.

安装界面美观时尚,它采用 GUI(图形用户界面),而非文本或命令行。

The instal ler moves r ight into the desktop

environment with a blurred version of its desktop

wallpaper overlayed with centered, translucent

Page 82: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·伙伴

80 2019.01

menus. This creates a pleasant visual effect.

安装程序会直接进入桌面环境,在模糊的桌面壁纸中心,叠加了一个半透明的菜单。看起来很不错。

The Deepin installer is a class act. It has a smooth

progression of setup steps displayed against a

blurred background image of the Deepin Desktop

Environment. It provides an easy guide that new

Linux users can follow with confidence.

以深度桌面环境的模糊壁纸为背景,安装器显示了一系列设置步骤,步骤很简单,Linux 新用户可以轻松地安装系统。

The next screen presents a mandatory End-User

Agreement. Its wordiness seems to exceed the

usual open source licensing requirements.

下一页展示强制阅读的最终用户协议,它的篇幅貌似超过一般的开源许可协议。

It is lengthy to read and has numerous references

to intellectual property. Ho-hum! Just scroll to

the bottom of the display window to activate the

ACCEPT tab to continue the installation process.

协议很长,并且有很多条款涉及知识产权。滚动到显示窗口的底部,即可激活“接受”按钮以便继续安装。

Unlike other Linux installation routines, Deepin

Linux does not test for an Internet connection. You

can install it without an online connection.

与其他 Linux 发行版的安装过程不同,Deepin Linux 不测试网络连接。在没有网络的情况下您也可

以安装。

Bottom Line最后

Deepin Linux 15.8 is a solid performer. The

developers have not yet provided language support

for many languages. This limits who can use this

distro.

Deepin Linux 15.8 表现优秀,但开发者尚未为很多语言提供语言支持,限制了该发行版的使用。

In Deepin's earlier years, the only available

languages were Chinese and a few related dialects

plus English. This latest release has expanded that

list to a dozen or so.

在 deepin 发展初期,唯一支持的语言是中文和一些中文方言,加上英语。最新版本已支持几十个语言。

Deepin is easy to operate. However, if you are

not familiar with most things Linux, do yourself

a big favor and first familiarize yourself with the

Deepin Manual that comes with the preinstalled

applications.

Deepin 易于操作。但如果您对 Linux 没有太多的了解,请先查看预装应用附带的深度帮助手册。

If security concerns you, especially when using an

operating system from a foreign developer, use the

full disk encryption feature now available with this

release.

如果您重视安全,特别在使用国外研发的操作系统时,请使用此版本的全盘加密功能。

Page 83: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Cooperative Partner

81www.deepin.com

deepin15.9+ 花生壳盒子国产软硬件也能享受丝滑的内网穿透

用户投稿

最近,不时地看到关于华为事件的报道,据专家分析,这说到底与核心关键技术的主动权有关系。联想到之前的中兴事件,我们不禁会问,作为普通的个人用户,在国家的自主可控战略之下,想要为之贡献力量,我们能做点什么呢?我想说,成为一个国产化产品的使用者,就能够起到非常积极的作用。

今天通过这个评测给大家介绍两款颜值爆表、功能强大、开箱即用的国产化软硬件产品:深度操作系统和花生壳盒子。深度操作系统是深度科技发行的国产操作系统,作为基于 Linux 的国产操作系统厂商,深度科技与国内上下游软硬件厂商广泛合作,长期致力于国产操作系统生态的建设。花生壳盒子是上海贝锐信息科技股份有限公司的研发的一款智能硬件产品,提供动态域名与内网穿透等功能。除了花生壳,上海贝锐还有向日葵、蒲公英等产品,分别提供远程桌面控制及 VPN 解决方案。

前不久,深度科技和上海贝锐联合在深度论坛推出了盖楼抽奖活动,我参加了这个活动并有幸被抽中,在此将使用这两款国产软硬件的体验分享给大家。

基础环境 硬件环境:家用 PC,具体配置如下 :

操作系统:deepin15.9诚如官方宣称的,美观易用!

没有绕来绕去的设置入口,绝不会找了半天不知道网络配置在哪儿。没有弹来弹去的各种广告,绝不会干着活却被莫名其妙的弹出框打乱思路。

用户想要的、需要的,静静地放在自然而然应该出现的地方。用户想要改变的,一个简单的拖拽,或一个右键单击,左键选择就能完成。

Page 84: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·伙伴

82 2019.01

花生壳盒子外包装媲美首饰盒子,很漂亮有木有?!拿出

来一看就俩口,一看就知道是干啥的,简单明了!

2)安装 wekan

环境部署 安装操作系统操 作 系 统 的 安 装 在 深 度 的 官 网 有 安 装 教 程

(https://www.deepin.org/installation/),安装过程简单明了,小白也搞得定,不在这里赘述了。

内网服务部署这里以一个内网的项目看板服务为例进行说

明,服务名称是 wekan,具体介绍看这里:https://opensource.com/article/19/1/productivity-tool-wekan。在深度操作系统上用如下两步完成上述服务的部署 :

1)安装 snap 工具

查看看板服务运行效果部署完成后,wekan 看板服务运行效果如下,

访问本地 8080 端口即可进行看板。

安装花生壳盒子 硬件安装超级简单,第一步,插电源;第二步,插网线。

大多数情况下路由器是默认开启 DHCP 服务的,花生壳盒子通过网线接入路由器后不用额外设置就可以成功联网。效果如下图,白灯常亮表示工作正常,联网成功。

Page 85: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Cooperative Partner

83www.deepin.com

使用花生壳盒子1) 浏览器输入远程管理地址 b.oray.com 进入花

生壳远程管理页面,输入花生壳盒子背面的 SN 码(位置如下图)及默认密码 admin 进入;

3) 添加内网穿透首先在左侧列表选择“内网穿透”,如下图,

然后选择映射类型,填写内网主机 IP 和内网服务端口,完成后点击“确定”按钮。

2) 扫码激活

用微信扫描二维码后,按照提示确认激活

配置完成后,会生成映射列表,如下蓝色框即为外网访问连接

4) 外网连接测试在 外 网 pc 上 通 过 浏 览 器 访 问 链 接

http://23326nu****.51mypc.cn

Page 86: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·伙伴

84 2019.01

输入用户名密码,点击“登录”,进入内网服务 wekan 页面。

评测总结 Deepin15.9deepin15.9,一如既往的高颜值,开箱即用。

时尚模式下的可收缩图标托盘让我直呼 OMG !深度操作系统使用过程中有如下几个印象深刻的地方:

系统安装简单方便:只需要从 U 盘启动,输入用户名密码,选择安装位置,剩下的自动搞定;

系统设置易于操作:所用设置都在控制中心可以快速找到,交互界面简洁明了;

软件安装一键完成:在深度商店中找到需要的软件,一键完成安装,复杂的事情后台自动完成。

花生壳盒子花生壳盒子 3.0,超出想象的部署简便,插线即

用。让以前配置复杂,甚至很难办到的内网穿透功能变成了即插即用的服务。无需公网 IP,无需路由器端口映射,无需 NAT 配置,全新的管理交互界面及功能体验,让以前繁杂的网络配置工作变成一种享受。

结束语 近年来,随着关键核心技术自主可控上升到国

家战略高度,加之类似中兴、华为等事件的出现,国产化、自主可控等概念已经逐步从国家层面、企业层面走进了普通消费者用户的视野。作为个用户,我们能做的就是去充分的使用国产软硬件产品,提出有建设性的反馈意见,为国产化的良性发展添砖建瓦。

深度·讲坛 征稿啦

是什么让你豁然开朗?是什么让你灵感迸发?又是什么让你百思不解?

这里汇聚了深度大神,专门凑在这里搞技术,从今往后,这里专治各种疑难杂症,你可以来提问,可以来传授技术,总之,这里都是爱凑热闹的技术控。

分享专业知识,方便学习交流,内刊“深度·讲坛”栏目长期向各位技术控们征集技术稿件啦。

字 数:1000+,图文并茂内 容:必须为原创投稿邮箱:[email protected] 注明“部门 + 姓名”

Page 87: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

Deepin Cooperative Partner

85www.deepin.com

投稿内容及要求:形式:摄影作品 Ps. 不要叫你的单反在家睡大觉了,赶紧出来发挥作用吧!

绘画书法 Ps. 你不发出来怎么能知道原来你还这么有才!

诗歌散文、游记、人生感悟 Ps. 知道你原来话不多,但是肚子里面还是有墨水的!

经验技术分享 Ps. 专业达人们,把你们的专业知识拿来 show 一下吧,科普一下啦!

以及能落实到纸上的任何才艺 Ps. 还有多少是我想不到的,快点告诉我 !

《deepin 集结》是深度科技内部刊物,它不仅是记录公司发展历程的一本”画册”,也是公司对外形象和企业建设的窗口。

自 2016 年伊始至今,《deepin 集结》已有定期发放给热爱深度的用户及合作伙伴,并得到了大家的认可。在收集各位读者的反馈意见后,我们开设了新栏目——深度伙伴,主要针对深度员工以外的人员投稿,使《deepin 集结》成为一个企业与用户沟通的刊物,彼此增加交流,分享开源技术。

投稿内容及要求:1. 内容:a 技术分享 b 用户体验 c 项目评价2. 要求:a 与行业相关 b 字数 1000-4000 c 文中图片需清晰深度的同学可以告知身边爱好开源的发烧友积极投

稿哦!

投稿邮件主题需标明 : 外部投稿(字样)+ 姓名 + 手机号码

内部征稿 外部征稿

要求:我们很看重有图有真相哦,图片和文字说明一样重要。稿酬:现金(微信红包)或精美礼品投稿方式:[email protected] 邮件名称一定要注明 “所在城市 - 部门 - 姓名”

诸位同学有任何问题,都可以立即马上咨询我们:[email protected]

Page 88: 跬步千里...邮箱投稿 市场推广 account-marketing@deepin.com 武汉联络处 地 址 武汉市光谷大道77号 光谷金融港B18栋6楼 邮 编 电 话 北京联络处 地

深度·伙伴

86 2019.01

we do we change...