混沌周刊 #5 | 一个时代的远去

各位,早上、中午、晚上好。

最近圈内圈外对一些技术存在争议,而话题的核心关键词之一就是「开源」。这词一点不难理解,字面展开便是,把自己的源代码拿出来给大家看不就是开源了吗?是,也不是。

实际上「开源」是一个较晚才出现的词,且其诞生本就是社区分裂的表现。更早时候描述这类作品的词叫做「自由软件」。实际上直到今天自由软件一词也广泛适用,且使用它会更显得你像专业程序员。不受人待见的一个重要原因,是「自由软件」一词政治意味过于浓郁。另一点的话,大概是英文里Free Software一词极容易被解读为「免费软件」(所以才有Free as in Freedom1的说法)。

尽管软件本身也就是不到一世纪内产生的概念,但自由软件的历史相比当代流行的信息技术们可谓源远流长。若有兴趣深入了解,可阅读维基百科有关自由软件的条目,以及观看著名的两部纪录片:《操作系统革命》及《代码》。

此处简而言之:衡量一个软件是否是「自由软件」(或曰是否「开源」)其实存在着明确标准:是否采用了OSI承认的自由软件许可证。而按照FSF (自由软件基金会) 定义,自由软件应保障用户四大自由上期亦有提到)。通常来说,获得认可的大型开源项目的管理、开发、运营过程都是公开的,并且会接受外部开发者的代码。否则只可说是「把源代码放出来」。当然,这种情况也不少见,比如「KPI开源」。

开源项目的这种模式看上去没什么问题,但到今天却产生了一种不对等:大公司可以免费从开源项目获得成熟软件,并以此提供服务获得巨额收入。而由于这些IT巨头的地位,开发者们很难有什么反抗之力。开源越来越离不开商业运作。侠客一出手便拯救世界的理想年代,或许真已远去。

🌲 亚马逊不需要眼泪

这样的例子还不少。MongoDB和Elasticsearch、Kibana等项目已经将许可证转换为服务端公共授权许可证 (SSPL),限制利用开源社区的免费劳动力提供SaaS服务,却没有什么回报的行为。显然,AGPL已经不足够了。在这个新的许可证下,如果这些服务商将他们的项目当作服务出售,那么这些服务的源代码也应该公开。没有暗示,修改许可证的声明里公开点名的就是亚马逊。

亚马逊并没有示弱,公开表示他们有能力从先前版本Fork分支出来自行维护,甚至还发文怒斥Elasticsearch的这种行为,称其为假开源。红帽也指出SSPL这样的许可证会在商业用户中带来「恐惧」。另一个例子是Docker,虽然Docker几乎已成为当今容器技术的事实标准,但在更高层次的容器编排生态,Google推出的Kubernetes占了绝对主导。Docker实际上并没有从其中获得多少好处。

如何让开源世界的开发者们能获得收入,是从有这个概念开始就有的难题。尽管今日人们已渐摸索出几条可行之路(卖服务、双重许可、拉赞助、模块收费等),但我的建议依然是(至少一开始)不要指望从开源项目里赚钱,把它当作推广自己和从世界学习的一种方式。其他行业也很难有这么美妙的事情了。有人抱怨,是程序员乐于开源的精神导致了自己的失业。然而,如果没有开源技术的繁荣,我们或许还处在「没有进入某家公司就学不到某项技术,在公司学到的技术到其他地方完全没用」的状态。感谢他们吧。

👨🏻‍💻 要不要做独立开发者

「独立开发者」这个概念,有些类似当今网络上流行的「独立女性」,属于某种神话 (myth)。人人都想成为,人人或许已是,人人又都不是。数字游民 (digital nomad) 的生活方式对朝九晚N的程序员,吸引力极大。谁不想走遍天南海北的同时,还能实现自我价值呢?看到一些独立开发者分享的生活状态,是不是想立刻裸辞去追逐理想?

请等一下。独立开发的本质是维护一个属于自己的Business. 如果你的Business还没有清晰的概念,你大概先需要好好设计它,然后尝试投放市场,运营起来,从实践中得出结论。这个过程并不短,可能需要几个月乃至几年的时间。普通人的积蓄不太能在没有其他收入的前提下支撑这么久,而且在那样境遇下自我的焦虑感是可怕的,今天快乐的你未必能料想得到。不要站在今天的心境里思考明天——不止对这件事如此。

而这些前期的实践步骤,并没有要求你辞职后才能完成。除非有特别限制(保密协议、竞业协议、特别条款),你大可在下班后尝试你的小小企业。即使你下班只想睡觉,至少可以构思。即便只是芦苇,人也是会思考的芦苇,不要放弃思考的权利。

Anyway,这里有一些关于独立开发的小小建议。如果你真的感兴趣,在互联网上还能找到更多。

🪵 看了什么

  • UNIX传奇:历史与回忆》,作者是Brian Kernighan,也就是那本著名的《C程序设计语言》共同作者。中学首次接触到Linux时看过UNIX发展史,惊叹贝尔实验室真是神奇之地,对产业的影响堪比仙童半导体。现在不太可能再有聚集如此多天才于一处,并使其自由发展的地方了。
  • Modern C++ won’t save us》,C++的很多「毛病」,一是因为历史负担;二则因为C++试图给予开发者自由,不会阻拦你作死。尽管代码还得那么写,但编译器已经足够智能,大多数情况都能给出警告,别忽略它直接向前开就好2
  • How to navigate directories faster with bash》,让你在命令行世界跳转得更快的一些技巧,对zsh几乎也适用。大概很多人都不知道CDPATH这个东西吧?
  • Database in the browser》,如果在浏览器里实现一个数据库会怎样?虽然我们已经拥有了。现在很多生产力应用出于开发效率考虑,都在使用Web技术实现。如何实现良好的离线体验,是它们和原生技术最大的差距之一。利用好本地数据库对此至关重要。
  • 随着职位晋升,工程师需要越来越多编码外的技能,其中还包括思维方式的转变:如何从只看自己的产出,到建立整个团队的影响力;如何学会给万事万物排序,放弃一些东西。初级程序员也许一时用不上这些技能,但提前转变思维方式,对构建自己的leadership至关重要,Leader is the one with leadership.

🍣 新鲜事

  • Windows 11正式发布,一个惊喜是支持运行Android应用(目前仅能通过亚马逊应用商店,但我们都知道最终可以Side load的)。近年来的微软在消费者层面也许乏善可陈,但讨好开发者的确是下了大力气:GitHub、NPM、Visual Studio Code、Windows Subsystem for Linux、.NET Core……对比隔壁连文档都不完整的Apple,实在令人感动了。说到这里,已经很少有人记得微软当年臭名昭著的3E战略了吧?
  • GitHub要给issues功能改版了!ZenHub们的情绪还稳定吗?上一条果真没说错。
  • Sublime Text 4发布,支持Apple Silicon,并采用类似JetBrains的半订阅制付费模式——购买的License包含3年更新,过期后依然可以使用旧版。
  • Linux Kernel 5.13发布,它也支持了M1芯片。
  • 这个Meta标签可以让网页控制在新版Safari3下的工具栏颜色 <meta name="theme-color" content="#00FFFF">,而我也不知道为什么它不支持 #FF0000 的红色。

See you next time. 如果你喜欢这个栏目,请将它分享给更多的人 😉

1 字面意思是「按自由的意思理解」。FSF创始人Richard Stallman的传记也叫此名,中文译作《若为自由故》,值得一读。
2 一个笑话:程序员驾驶到悬崖边,看到立牌上书「WARNING」,不予理会径直开了过去。
3 如果你想尝鲜又不想尝试macOS Monterey,不妨下载紫色的Safari Technology Preview.


发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注