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 也在变强,但大量企业软件仍然还活在桌面客户端和本地管理工具里。

那套 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 让这条线被更多公众看见。
参考资料
- Apple Newsroom:Apple Reinvents the Phone with iPhone
- Apple Newsroom:iPhone available June 29
- Open Handset Alliance:Industry Leaders Announce Open Platform for Mobile Devices
- VMware News Release:VMware IPO
- Federal Register:Addition of Entities to the Entity List
- Bureau of Industry and Security:Huawei Entity List Frequently Asked Questions
微信公众号
欢迎关注「字与码」
如果这篇文章对你有用,也欢迎在微信里继续关注后续更新。
X / Twitter
关注 @ax2_zicode
更即时的技术观察、新文章提醒和一些短想法会发在 X 上。