2007,桌面开始失去中心
原创 · 约 20 分钟阅读 · 阅读 --

2007,桌面开始失去中心

作者: 字与码


古董级程序员,大厂出来后一直在创业公司,现在仍活跃在一线做 AI 相关的开发。这个专栏会慢慢写从 1990 年代到今天的 IT 变化,也会夹带一些自己的旧事。更完整的更新写在微信公众号「字与码」,若觉得这些回忆和观察对你有用,欢迎顺手关注。

上一篇写 2006 年,我说服务器开始变得不一样。S3、EC2、Hadoop、jQuery、Twitter、Java 开源,这些东西都在把软件从“装在某台机器上”推向“运行在一整套基础设施里”。

到了 2007 年,另一个方向也开始松动:桌面不再是计算世界的唯一中心。

1 月 9 日,乔布斯在 Macworld 上发布 iPhone。6 月 29 日,第一代 iPhone 正式开卖。今天再看那场发布会,很多细节已经被反复讲过:多点触控、全屏浏览器、iPod + 电话 + 互联网通信设备,乔布斯说今天要发布三个产品,最后告诉大家其实是一个。

可是如果把它放回 2007 年的程序员现场,它真正刺痛人的地方不只是“手机更好看了”,而是它改变了软件运行的重心。

在很长时间里,软件的主战场是桌面。Windows 桌面、Linux 桌面、浏览器、Delphi、MFC、GTK、Qt、企业客户端,都是围绕“用户坐在电脑前”展开的。服务器当然重要,但很多业务软件的用户界面仍然假定用户面对的是一台电脑、一块屏幕、一只鼠标、一个键盘。

iPhone 出现后,这个假定开始被动摇。

那一年我并没有立刻转去做移动开发。我仍在 Linux 公司体系里,做的是偏底层、偏服务器、偏管理软件的活。可也正是因为这样,2007 年在我的记忆里有两条线并行:一条是手机把计算入口往口袋里拉;另一条是我继续在 Linux 服务器和桌面管理工具之间打转。

手机不是小电脑,是新的入口

早期智能手机当然不是从 iPhone 才开始。Palm、BlackBerry、Symbian、Windows Mobile 都已经存在。很多技术人甚至会觉得,iPhone 一开始不开放原生应用,功能也不够“专业”。但它真正改变的不是参数表,而是人和软件的关系。

手机不再只是电话加一些功能。它开始成为随身的计算入口。

桌面时代的软件,用户通常是“坐下来使用”。移动时代的软件,用户是“随时拿出来用”。这两个动作差别很大。坐下来意味着时间较长、上下文较稳定、输入设备完整;拿出来意味着碎片化、位置相关、网络不稳定、注意力随时被打断。

软件如果要适应这种入口,就不能只把桌面界面缩小。它需要新的交互、新的状态管理、新的同步方式、新的网络容错、新的通知机制,也需要重新理解用户行为。

2007 年当然还没有今天这样成熟的 App 生态。App Store 是 2008 年才出现的。可第一代 iPhone 已经把问题摆在那里:如果用户未来更多时间不在桌面前,桌面软件的中心地位还能维持多久?

对我这样还在 Linux 桌面和服务器世界里工作的人来说,这个变化有点远,又有点近。远的是,我们日常仍然在写 C++、GTK、系统服务和管理工具;近的是,所有人都能感到,计算设备的重心开始移动。

Android 阵营出现,Linux 走进另一个方向

2007 年 11 月,Open Handset Alliance 宣布成立,Android 同时公开亮相。后来 Android 会成为全球最重要的移动操作系统之一。对 Linux 圈的人来说,这件事有一种微妙的讽刺感。

很多人曾经期待 Linux 桌面能正面挑战 Windows 桌面。国内 Linux 公司也在这个方向上做过大量努力:桌面环境、本地化、输入法、办公软件、教育和政府市场、行业客户定制。

但 Linux 真正大规模进入普通用户手里,并不是以传统桌面发行版的形式,而是以 Android 手机的形式。

这说明技术路线有时并不会按从业者最熟悉的方式胜利。Linux 内核、开源组件、硬件厂商、移动终端、运营商、应用生态,组合出了一条完全不同的路径。它不是把 PC 桌面搬到手机上,而是在手机这个新入口上重建生态。

2007 年我当然还看不到 Android 后来的规模,但能感觉到,操作系统的故事正在分叉。桌面 Linux 仍然重要,服务器 Linux 更重要,而移动端 Linux 会以另一种形态爆发。

这也让我后来越来越警惕“技术正确就一定赢”这种想法。技术正确只是条件之一,生态位置、商业模式、分发渠道、硬件时机、用户体验,任何一个因素都可能改变最后的结果。

被收购以后,开始写 C++ 和 GTK

2007 年左右,公司被一家美国公司收购。我开始用 C++ 和 GTK 开发基于 Linux 的集群管理软件。

这段经历和前几年的文件系统开发不太一样。文件系统、同步、快照更靠近底层;集群管理软件则站在更上面,要把一堆服务器、服务状态、配置、任务、告警、资源关系,组织成用户可以理解和操作的界面。

它仍然是 Linux 世界里的东西,但已经不是“装一个发行版”那么简单。你要面对的是一个集群。

集群意味着多台机器、多种角色、多种状态。哪台机器在线,哪个服务异常,任务跑到哪里,配置是否一致,节点之间关系如何,故障之后怎么恢复,管理员如何快速判断问题,这些都要被界面和后台逻辑组织起来。

那时的管理软件大多还是桌面客户端思路。我们用 GTK 做界面,用 C++ 写业务逻辑和框架。今天看,很多人会本能地问:为什么不是 Web 管理界面?为什么不是浏览器?原因也很简单:当时的技术栈、团队积累、客户环境、性能和部署习惯,都还没有完全转向浏览器。

2007 年的一个微妙之处就在这里:前端入口已经被 iPhone 撬动,Web 也在变强,但大量企业软件仍然还活在桌面客户端和本地管理工具里。

2007 年的 Linux 集群管理软件

那套 C++ 框架,让我提前看到一些“现代感”

那套 C++ 框架让我印象很深。

它不是国内常见的“能跑就行”的工程代码,而是一些国外研究员级别的大牛搞出来的东西。今天回想起来,里面已经有很多后来现代 C++ 里才更普遍的味道:智能指针、资源生命周期管理、对象组合、抽象边界、事件机制,以及对复杂状态的约束。

那时 C++11 还没有发布,很多东西当然不是标准库里现成的。可优秀的 C++ 工程师早就在用自己的方式解决内存、所有权、异常安全、对象生命周期这些问题。

这对我影响很大。

在那之前,我写过 C、Perl、PHP、Java、Shell、Python,也写过一些 C++。但真正看到一套大型 C++ 框架如何组织复杂系统,感受是不一样的。C++ 的麻烦并不只是语法复杂,而是它把很多工程责任直接交给程序员:资源什么时候释放,对象谁拥有,错误如何传播,线程和事件怎么协作,接口边界怎么稳定。

写不好,会很痛苦;写好了,会很有力量。

这也让我后来对“语言简单”和“系统简单”的区别更敏感。有些语言看起来简单,但系统复杂度不会消失;有些语言看起来复杂,但如果框架和约束做得好,反而能承载更重的系统。

虚拟化上市,服务器继续被抽象

同一年,VMware 上市。它代表的是另一条和 2006 年云计算相连的线:虚拟化。

虚拟化没有云计算那么面向终端用户,也没有 iPhone 那么有舞台效果,但对基础设施的影响非常深。它让一台物理服务器可以承载多个虚拟环境,让资源隔离、迁移、备份、测试、部署都进入新的层次。

如果说 2006 年的 S3、EC2 把基础设施推向 API,那么 2007 年的虚拟化热度则说明,物理机器和软件运行环境之间的关系正在被重新拆开。

这和我当时做集群管理软件其实是同一类问题:机器不再只是机器,机器上有角色、有服务、有资源、有状态、有依赖。管理员需要看到的不是一台服务器的外壳,而是一组可管理的能力。

我们公司本来做的也是存储相关的东西。被美国公司收购前后,大部分同事后来去了 EMC、VMware、Sun 这些大外企。现在回看,这个流向很合理:存储、虚拟化、服务器、系统软件,本来就在同一条基础设施产业链上。那几年如果继续沿着这条线走,去外企做系统软件、存储或者虚拟化,是非常自然的选择。

我后来没有继续去外企,而是去了百度,进入互联网行业。这个转向对我后面十几年的职业路径影响很大。这里要记一笔:需要感谢当时录用我的 Leader,连城。连城是非常好的人,也给了我进入互联网大厂的机会。后来在我离开百度之前,他去了硅谷,成为 Databricks 的早期员工。这个故事不适合在 2007 年展开太多,更适合放到后面写 2010 年进入百度、以及 2012 年离开百度时再细讲。

后来云平台、容器、Kubernetes、服务网格,都会把这条线继续往前推。到了今天,很多开发者甚至很少直接登录物理机,基础设施已经被抽象到更高层。

技术公司也会撞上政治边界

后来公司做不下去,曾经打算卖给华为,但被美国政府禁止。

这个故事如果只当成公司八卦,就写轻了。它其实提醒我,基础设施技术从来不只是技术。

操作系统、文件系统、集群管理、服务器软件、虚拟化、网络协议,这些东西看起来离普通用户很远,却常常处在产业链和国家安全边界上。谁掌握底层系统,谁控制关键基础设施,谁能服务哪些客户,谁能卖给谁,很多时候不是工程师能决定的。

很多年后,华为被美国持续打压,2019 年被美国商务部工业与安全局列入 Entity List,随后又扩展到更多关联公司和更复杂的出口管制规则。那时候很多人第一次强烈感受到,芯片、操作系统、EDA、通信设备、服务器、云基础设施这些东西,真的会被放进国家安全和技术控制的框架里。

但对我来说,这种感觉并不是从 2019 年才开始的。更早以前,美国政府在技术出口和公司并购上就已经有很多限制。我在那家做存储和系统软件的公司亲身经历过一次:一家并不站在公众视野中央的技术公司,最后也会因为底层技术、客户结构和潜在买方,撞上外部监管边界。

年轻时容易相信,只要技术好,产品好,公司自然会有出路。后来才知道,技术公司也活在市场、资本、政策、国际关系和客户结构里。尤其是做底层系统和基础设施的公司,更容易撞上这些看不见的边界。

这段经历没有改变我对技术的兴趣,却改变了我对技术公司的理解。代码只是公司命运的一部分,有时甚至不是最决定性的那一部分。

桌面还在,但中心已经偏移

2007 年很适合用“偏移”来形容。

桌面还在,服务器还在,Linux 公司还在,C++ 和 GTK 管理软件也还在。可中心已经开始偏移。手机成为新的入口,Android 让 Linux 走进移动生态,虚拟化和云计算继续抽象服务器,Web 管理界面也会越来越普遍。

我当时还在写桌面管理软件,但这个世界正在告诉我们:未来的用户不一定坐在桌面前,未来的服务器不一定由人手工管理,未来的系统也不一定靠一个厚客户端呈现。

这不是说桌面软件突然失败了。很多专业软件、企业软件、开发工具到今天仍然离不开桌面。但桌面不再是唯一中心。它开始和手机、浏览器、云平台、后台服务一起,成为更大系统里的一个入口。

下一年,Android 和 App Store 会把这种变化推得更明确。软件分发、平台生态、开发者商业模式都会重新洗牌。对我来说,Linux 公司的故事也会继续往下走,直到 2009 年前后这一段经历逐渐收束。

2007 年 IT 大事记

  • 第一代 iPhone 发布。 2007 年 1 月 9 日,Apple 发布 iPhone。它把电话、音乐播放器和互联网通信设备融合在一起,重新定义了移动终端的交互方式。
  • iPhone 正式开卖。 2007 年 6 月 29 日,第一代 iPhone 开卖。手机开始从通信设备变成随身计算入口,软件产业也由此进入移动应用时代的前夜。
  • Android 公开亮相。 2007 年 11 月,Open Handset Alliance 成立,Android 同时公开亮相。Linux 内核将在移动设备上获得远超传统桌面 Linux 的用户规模。
  • VMware 上市。 VMware 在 2007 年上市,虚拟化作为基础设施能力受到资本市场强烈关注。服务器、存储、测试环境和数据中心管理都被虚拟化重新组织。
  • 基础设施继续抽象。 Linux 服务器、集群管理、虚拟化、云计算和移动终端共同推动软件从单机时代走向多入口、多资源、多层抽象的时代。
  • 技术出口边界显影。 底层系统、存储、虚拟化和通信基础设施很早就处在出口管制与国际监管边界上。很多年后,华为被列入 Entity List 让这条线被更多公众看见。

参考资料