用 Ubuntu 做日常开发电脑的系统是一种怎样的体验？

只要公司支持，一切问题其实都不是问题。所以你要说最大的坑，那就是：确认部门主管是否支持你这么做？

我们部门是支持大家日常用 Ubuntu 工作的，所以在很多地方给了照顾。我来说说具体的一些细节。

一：
首先说说办公的 OA 平台，我们早期用的是 Notes，这个玩意其实即便在 Windows 下也并不算好用，不过毕竟它是有 Linux 版本的，我们公司也提供了 Linux 下的安装包。

当然，由于那个安装包对依赖软件的版本限制太死，实际上依然有很多人的 Ubuntu 安装不了那个安装包。那么只能寻求替代解决方案。如果仅仅看邮件的话，任何邮件客户端都可以，但 Notes 平台还会有一些通知或者流程性的东西，比方说公司通告，以及请假流程之类，我们长期是让部门的秘书帮忙做这件事情，如果我们因为没有 Note 客户端而没法查看公司公告，她会转发我们部门全体，如果有请假或者审批流程之类的操作她也可以帮我们搞，所以有她一个人用 Windows 就够了。

从前几年开始，我们公司逐渐把办公流程转移到手机上来，一部分操作转移到了企业版微信上，另外一部分任务（比如一些只希望在公司内网存在的东西）公司专门开发了内部app，有iOS跟android版本，在公司内部就可以连上，公司外需要走VPN。这样子，只要有手机，安装了企业版微信，以及公司提供的内部软件，以后就不需要操心办公流程相关的问题了。

至于办公三大件，大概是这样的，文档可以用 WPS 搞，这玩意兼容性还凑合，但我们主要只用来看文档，写文档方面，如果是设计其实很多时候可以生成，例如 Java 可以输出javadoc，C++可以用 doxygen，语法跟 javadoc 很类似。scm 相关的工作流很多可以用在线的网页版，有的是内部搭建 web server，有的甚至直接用 微信。——实话实说，虽然有些时候 WPS 也会有点坑，但公司如果大家统一都用 WPS，很多坑就不存在了。而恰恰我们公司至少官方明面上是规定所有人统一用 WPS 的，（虽然还是有人私下里偷偷用 MSOffice）。

我们本身做电子产品开发的，对手机的接受度非常高，所以能用手机完成的事情都不强求非要在电脑上做，一旦接受了这个设定，那么电脑用 Ubuntu 并没有多少不方便的地方。所谓「截个图发给我」也常常就是手机拍照点发送，并没有什么违和之处。

二：
然后说说开发环境，其实这本没什么可说的，毕竟在 Windows 下可能成为噩梦的某些依赖库环境搭建，在 Ubuntu 下很可能就是一句 apt-get 完成的事。
我们就是传统的 Linux 开发，本来就是开发运行在 Linux 上的软件，所以用 Linux 作为开发平台理所当然，在 android 崛起之后我们自然也有了 android 的产品线，毕竟 android 也同样是 Linux，而就开发 android 来说，Linux 依然更优，我至今不清楚怎么让合作的友商用 Windows 编译我们基于的 NDK 代码，虽然听说 cygwin 能够实现，但有那功夫我们直接编个包丢过去就好了嘛。
在公司内网临时传文件常用的是 ftp，每个人都会装上 vsftp 之类的服务，然后其中开个能上传的目录，别人要传文件的话，就给别人私信一个 IP 地址即可。当然，这种方式仅仅用于临时传文件，更多的情况下，我们还是使用版本管理系统 svn 同步文档。比方说一群人现在在做某个项目，那么某个项目相关的所有文档都会在某一个版本管理系统的仓库中，其他人只需要 update 就好了。我们的美工制作的效果图以及切图，合作商传播设计文档，需求文档等等，也全都是扔进版本管理仓库的，其他人需要哪个文档，到对应目录下去 update 就好了，毕竟 svn 支持分子目录进行 update。
对我个人来说，有时需要在目标机与开发机之间同步文件，我会使用 hg 这样的分布式版本管理软件，原则上跟用 svn 是一样的，不过私自的版本管理可以避免公司的 svn 日志膨胀得太厉害。hg 的 ssh 协议比 git 略好用一些，这也是我用 hg 的主要理由。
即时通讯，这个早期我们是用的Windows下的自研软件，运行速度如飞，后来自研的那个友商停更了，我们转到 Linux 平台之后就开始用 google talk，不过 GT 用起来一天比一天不稳定，原因你们懂的，后来就又过渡到了微信。反正浏览器可以开微信，只要有浏览器就没什么不能做的，这样就彻底的解除了对系统的依赖。
然后就编译环境来说，如果是基于 GNU/Linux 的软件，常用的方法是每个不同的项目都通过 chroot 创造一个基于该项目的编译环境，它也通过版本管理系统分发，这可以使得无论你用哪个发行版的 Linux 都可以正常编译，因而我们部门不需要对大家安装的 Linux 发行版进行限定，大家可以根据自己的爱好任意选择。——如果是基于 Android/Linux 的软件则没有这个必要，毕竟 android 自带一套工具链，本身完成了类似的工作。

Ubuntu 开发者用好 apt-get 就非常开心了，对吧？所以这个不细说。能用 apt-get 装的就装系统的，不要试图自己编译折腾，这就是坠吼滴。

浏览器我一般用 Firefox，当然 chromium 偶尔也用，不过 firefox 还是功能更强更好用。firefox 唯一可以吐槽的是启动速度，然而，开发人员的电脑是从来不关的，我的 firefox 也是从来不关的，对于六个月重新启动一次的 firefox 来说，它启动速度快还是慢根本没影响，功能好用才是最重要的。

嗯，对了，我的电脑正常情况下六个月重新启动一次，为什么？因为 Ubuntu 六个月升一次级。

输入法我用 ibus-rime，不过这个实际上有很多选择，只不过我在 Windows/MacOSX 上面也都用 rime，所以 Linux 下用它最习惯。习惯搜狗的人自然也可以用搜狗，大家各取所需就好。

字体什么的配置，其实是需要定制一下 X 的相关文件，不过这都是十年前的事了，我定制好之后一直没动过，也一直不需要动。

如果你用多台电脑，记住一定把配置最高的那台给 Linux，至少是要内存最大的那台，长期不关机的 Linux 机器其实只要内存够大，不会太吃 SSD，平时的常用任务就那么几个，完全都是在内存中跑的，由于你不装任何流氓软件，所以根本不会遇到扫描硬盘的事。不像 Windows ，一言不合就扫描全盘，只要你配的不是 SSD ，就会经常看着 100% 硬盘占用干瞪眼，你还很难定位究竟是哪个流氓应用在做这件事（毕竟它很可能是 Windows 系统自身干的）。
不吹不黑，整体来说，除了不太吃 SSD 以外，其他方面 Ubuntu 的优化比不上 Windows，内存占用更是远高于 Windows，这更意味着你需要把性能更好，内存更大的电脑配备给 Ubuntu ，保证足够流畅的用户体验。

三：
其实用 Linux，如果你要求特别高，肯定是需要一定的折腾能力的。因为各种软件都可能存在或多或少的小问题。这些问题真解决起来并没有那么难，就是不一定有人去解决。例如我常用的终端，之前用 konsole，kde3时代本来有问题我自己下载源代码都搞定了，升级 kde4之后又弄出一堆问题，我只好又拿源代码改呀改终于满足自己需求，再后来kde5出来，本来能用的功能又不能用了，我折腾很久都没搞定，于是改去折腾 xterm，后来发现这出人意料的好用，这才是稳定的神器，所有功能都符合需求，于是现在就直接用 xterm 了，早期版本的 xterm 在刷新方面效率很成问题，个人觉得是唯一的 bug，但现在版本没问题了。估计以后我都会用 xterm 这个万金油的元老作为自己的终端。
再还有系统快捷键的一些处理，尤其是小键盘区，这个为了打造成让自己满意的样子也是需要一定折腾的。
如果你需要打印机，你看到，即便各种打印机都有Linux驱动，但具体各种应用对打印机的适配都不一定完全好用。
用惯 Linux 的人通常都会对这件事情习以为常：即便别人完全弄好的东西，你拿过来用，依然可能出问题。所以 Linux 环境一旦搭好就别折腾，尤其千万别重装，可以升级不要重装，毕竟升级几乎不改变什么。当然，如果决定升级，请一定选一个你大概有一天空余的时间搞升级，毕竟升级谁也说不准会不会出什么问题，现在赶着上线新版本然后你说你系统升级出问题不能用这就扯犊子了。我每次都会提前规划一个自己相对有空的时间，再考虑升级。

我现在这个系统是 2006 年 Ubuntu 6.06 开始装的，一路随着 Ubuntu 升级到现在的 18.04，中间经历了几次换电脑，换电脑的时候都是直接硬盘拷贝过去的，然后系统可以直接启动起来。——虽然经历过多次版本升级，但十几年没有重装过一次系统。——换句话说，其实该折腾的东西，早期都已经折腾好了，剩下的大多数时间里，Ubuntu 是一个完全无需折腾的省心的系统。

大致就这样，有问题的，欢迎评论。