30岁的文本转码:从哲学家到知名软件项目核心开发

“以前我对技术一窍不通,但现在我已经掌握了编程技能,并开始朝着自己的计算自主方向努力。还有很长的路要走,但我至少在迈出步伐。”

自由软件基金会 (FSF) 宣布了 2021 年自由软件奖的获奖者。这一系列奖项是在 LibrePlanet 2022 大会上颁发的,获奖者主要是为软件自由事业做出重大贡献的个人、团队和社区。令人鼓舞的是,非技术专业的 Protesilaos Stavrou(“Prot”)今年获得了“杰出新自由软件贡献者奖”,该奖项旨在表彰对自由软件社区做出杰出贡献的社区新成员。

FSF 在对 Prot 的颁奖演讲中写道:“自 2019 年以来,这位哲学家通过他的博客文章、会议演讲、现场视频和代码贡献一直是 GNU Emacs 社区的中流砥柱。

是的,你没有看错。今天的主角普罗特是一名热衷于研究哲学的文科学生。他出生于 1988 年,具有非技术背景。他在大学学习人文学科小程序源码能直接用吗,近几年才开始接触科技。因此,他对自己获奖感到非常惊讶。

FSF 执行董事 Zoë Kooyman 说:“Protesilaos 对刚进入社区的人来说是一个非常鼓舞人心的榜样。它表明,一个人不需要几十年的经验来为自由软件做出贡献,即使是在一个特定的项目。”

不少网友也表达了对Prot的祝贺和敬意:

Prot 是我见过的最善于表达、谦逊、谨慎和健康的人之一。想到他在没有任何技术背景的情况下接触 Emacs 和 Lisp 并刚刚开始贡献,这简直是疯了。为你干杯,普罗特!–gitrog

他在几乎没有背景的情况下拿起它(Emacs 和 Lisp)的速度令人惊叹。2016 年学习 Linux/UNIX,2019 年开始使用 Emacs。另一个有趣的事实:他做这些教程视频的主要目的是练习他的英语。–BeetleBGNU EMACS 是一个可扩展的、可定制的、免费的、自由的文本编辑器。同时,它也是一个集成的开发环境。根据 Prot 的说法,在过去的两年半中,他编写了数千行 Elisp 并为核心 Emacs 做出了贡献,其中包括两个完整的、完全可访问的、可定制的主题 – modus-themes。

“当我来到 Emacs,当我切换到 Emacs,当我两年半前加入环境时,我找到了我需要的一切。高质量的文档,适用于 GNU Emacs 的优秀程序,大量的博客和教程等等,当然,与不同的人互动,你总能学到新东西。” Prot 在他的获奖感言中强调,“虽然这个奖项是针对个人的,但我认为它实际上是关于社区的——社区的所有无名英雄都在帮助特定的人取得成就。”

“没有我们生活中的无名英雄,没有人会取得任何有意义的成就,”普罗特说。

以下内容摘自 Prot 在 LibrePlanet 2022 大会上的演讲。他分享了他选择 Emacs 的原因以及他对自由软件的经验和理解,希望能给读者带来启发。

成为 Emacs 的粉丝

在这里我想谈谈为什么我会成为 Emacs 的忠实粉丝。各种高级功能和丰富的软件包固然不错,但不足以捕捉到 Emacs 的精髓,尤其是它的真正价值主张。毕竟,现在大多数现代编辑器都有一个插件系统,可以为用户提供几乎所有必要的临时功能,那么 Emacs 有什么特别之处呢?

答案是 Emacs 并不是真正的文本编辑器。它实际上是一个可编程平台,文本编辑只是交互的要点之一。

Emacs 是用一种名为“Emacs Lisp”的 Lisp 方言编写的,也称为“Elisp”。因此,它的大部分代码库和用户配置也是用 Elisp 编写的。这意味着对于最终用户,Emacs 只涉及一种语言和一种范式。这样一来,内置代码与用户开发的插件代码没有区别,真正实现了语言风格的统一。

Emacs 的核心是读取和运行 Elisp 的能力,这被称为“评估”。Emacs 环境在评估 Elisp 时可以很容易地使用相应的返回值。这些扩展在不重启程序的情况下实时生效,让用户可以即时交互观察效果。

从这个角度来看,Emacs 相当于一台 Lisp 机器,可以用来执行任何类型的程序。这里的“程序”可以指代一切,包括Org或Magit等大型功能,以及流线型文本编辑和操作等小型应用程序。

此外,Emacs 是自记录的,这意味着它了解变量的值何时发生变化并在相应的帮助缓冲区中通知用户。同样地,Emacs 也可以反映各种功能的新价值与现状的关系。

最后,Emacs 是纯免费软件,直接提供内置工具和所有已安装包的完整源代码。这样,文档中显示的内容就与实际程序的执行内容毫无障碍地融为一体。

我使用 Emacs 作为集成计算环境

2019年夏天开始使用Emacs,之前对Lisp一无所知,编程水平也不高。上大学的时候学的是人文学科,所有的硬核技能都在最近几年逐渐掌握。

Emacs 对我很有吸引力,因为 Lisp 机器显示出巨大的潜力。我想要的是一个不同于以往日常计算工具的集成开发层。我想要一个统一的主题,精确的排版,和相同的操作/交互模式。另外,我希望能够在不同的上下文或接口之间建立连接:我的邮件客户端应该能够直接与任务调度程序和文件管理器对话,我在编写文本时使用的配置需要直接适用于编程接口,等等等等。

Emacs 通过它自己的和第三方的包/自定义代码完全满足了我的所有需求。如果你愿意稍微学习一下 Elisp,那么 Emacs 可以说蕴含着无限可能。下面,让我们看一下无需高水平技能即可实现的一些常见工作流程:

因此,Emacs 可以连接各种接口,而完全不会因上下文切换而引起任何冲突。

Emacs 的最后一个优势是易用性和大规模易用性。例如,我想用自定义代码制作本次演讲中的演示内容。因为图片只占文档的一小部分,很多朋友会认为这是预建的PPT。不,我可以直接编辑里面的普通文本。所以我实际上在 Emacs 中使用了非常简化的“焦点模式”,它在演示、阅读、写作和编程中都非常有效。

而我在 Emacs 中所做的一切都只需要完成一次。我不需要在电子邮件客户端中设置自定义焦点模式,也不需要为文本编辑器/处理器或议程规划器设置更多其他焦点模式。完全不需要,使用相同的模式即可。另外,我不需要单独的文本编写和渲染工具小程序源码能直接用吗,所有功能统一互操作,简单易用!

此外,底层配置全部在 Elisp 中完成,进一步简化了整体效果。在使用 Emacs 之前,我倾向于为每个应用程序使用不同的范例和/或语言。例如,Thurderbird 和 Libreoffice 的设置菜单不同,无法相互通信。Mutt 有自己的配置方式,Vim 和 Tmux 也有,终端模拟器也有,迫使人们一遍又一遍地做无用的工作。

我并不是说应用程序不应该有自己的配置方式。我只是建议它们应该结合使用,而现在相互断开和断开的状态绝对不够好。用户只能尽力从功能孤岛拼凑整个系统。即使付出了很大的努力,仍然可能存在不足甚至安全漏洞,因为这些程序不是来自同一平台或使用相同的语言。

在 Emacs 中,每一个新的特性包都会自动获取其他包中已有的内容,比如相同的字体配置和主题,常用的操作和交互方式等等。以此为基础,我们可以大大加快工作流程的进度。Emacs 内部发生的一切都存在于同一个环境中,所有的上下文都可以相互关联,用户可以随意建立这种关系。这种高度集成和独特统一的体验也构成了 Emacs 价值主张的核心。

一致性和自主性

就许可证而言,Emacs 是免费软件。但它给最终用户带来的自由不仅限于法律或伦理方面,而更多地体现在实践方面——即上文提到的集成计算环境。

Emacs 的可扩展性使用户能够使用他们的计算设备执行非常广泛的处理任务。同时,Elisp 的统一特性降低了进入门槛,彻底消除了以往全方位知识库需要在没有共同基础的情况下拼凑应用程序的困境。

日常生活中的自由是极其宝贵的,而 Emacs 是一个代表自由的工具,它帮助我们尽可能地拉近发展目标和计算机生成的结果之间的距离。

软件的自由体现在计算手段的所有权上。基于灵活的所有权,我们可以在计算空间自主开发。这种自主性使我们可以随意选择用于特定目的的工具,而不受硬编码甚至固定物理服务所施加的限制。

在我看来,我们日常使用的各种应用程序之间缺乏集成绝对是一个大问题。我觉得我没有资格获得它,而且我无法获得工具来完全按照他们的意愿行事。于是出现了最大的悖论:自由软件限制了我的自主权,使我不自由。这导致 1+1

换句话说,这些工具是在“教我们做事”,我们作为用户对这些“教条”的制定完全没有影响。

但在 Emacs 的帮助下,我终于在日常计算中摆脱了这些异质性和异质性元素。现在,我几乎在 Emacs 中做所有事情:阅读和写作、文件管理、任务计划和组织、电子邮件交换、音乐收藏和播放、互联网浏览等等。唯一的例外是我真的不能没有图形网络浏览器。

让我们谈谈更抽象的。自由的概念包含两个层次:名义上的自由和实质上的自由。前者反映在代码库遵循的许可证中,后者反映在代码库本身的内容中——即整体使用体验,以及代码库如何适应特定环境中的其他程序或工作流。

我认为软件自由的问题特别有趣,值得进一步探索。正确性、可组合性和可扩展性是软件代码的基本属性。只有将这些特性有机地结合起来,程序才能在实践中充分发挥其能力。所以我们需要的是真正的自由,而不仅仅是许可条款层面的名义自由。

假设有这样一个程序,它既没有任何文档,代码的编写方式,也极难理解。尽管它遵循免费许可,但各种现实提醒我们,它与用户体验层面的自由和自主无关。用户很难理解这个程序的内部工作逻辑,自然也无法理解为什么会给出最终的结果。结合个人经验,我认为这是典型的名义上的自由——“自由”只存在于许可条款中,在实际体验中完全不存在,绝对不是真正的自由。

我对 Emacs 的体验也让我意识到,作为一个软件技术社区,我们的重点必须始终放在最终用户身上,我们不应该发布用户无权执行的代码。相反,我们应该放手让用户管理他们的计算方式。自由软件不仅仅是专有代码的替代品;它更多地象征着激励人们改变对自主思想的态度。社区与用户之间的关系不仅仅是给予和接受,而是引导用户习惯于争取自由和承担责任。

而这样做的最终目的,就是将人们从长期束缚我们的版权体系中解放出来,将权利交换给用户。是的,代码本身并不是最终目标,所以开源社区必须有勇气跳出公式化的版权文档。“接受或离开”的一刀切方法既不会赋予用户权力,也不会促进他们的自主权。一个好的项目不仅应该是可访问的、可配置的和有据可查的,还应该为自由事业的发展做出贡献。

推进这一事业的第一步是打破软件障碍,让所有程序协同工作。最终,用户将学会如何掌控他们的整台电脑,让每个人都能真正成为自由软件新时代的一部分。

Emacs 社区和我的社区贡献之旅

在谈论 Emacs 这么久之后,我们实际上有了自己的社区。Emacs 社区欢迎新人,希望传播知识,分享想法。Emacs 社区一直对开发质量有着极高的要求,并将其视为用户自由的大事。目前,常规的 Emacs 软件包都提供了详细的文档,允许用户通过多种选项来配置他们想要的用户体验。

Emacs 社区很清楚,我们无法控制最终用户的主动性。因此,所有相关代码都有很好的扩展性和定制空间。社会一直认为自由是主体之间的经验发展,因此仅在法律层面释放约束是不够的。因此,Emacs 提倡强大的文档文化,每个 Elisp 表单都必须用自然语言解释其功能,每个功能包都必须提供使用和配置说明。通过这种方式,我们希望保证最小的计算自由度。

这是 Emacs 的处事风格,它一直延伸到核心应用程序。作为一台 Lisp 机器,Emacs 的设计初衷就是为了充分授权最终用户,重新审视所有既定规则。例如,我的 Elisp 之旅始于编写小的函数包装器,这些包装器可以调整一些默认操作的执行方式。我想添加“下移一行”命令的功能,以支持下移一定数量的行。Emacs 可以实时评估代码,并开放完整的源代码和相关文档。正是这种开放性让我能够弄清楚如何定义函数,然后通过反复试验编写我的第一个自定义 Elisp。

在那之后,我继续调整 Emacs,希望实现一些小的优化,这将有利于我的日常工作。在这段时间里,我逐渐掌握了 Elisp,并利用这些新知识轻松地操作 Emacs。在过去的两年半里,我编写了数千行 Elisp 并为核心 Emacs 做出了贡献,其中包括两个完整的、完全可访问的、可定制的主题 modus-themes。

换句话说,我作为 Emacs 用户的前三个月所学的编程比我在自由软件社区的前三年所学的还要多。对我来说,这是社区引领终端用户增长和满足终端用户需求的最好例子。以前技术一窍不通,现在掌握了编程技巧,开始朝着自己的计算自主方向努力。还有很长的路要走,但我至少已经采取了措施。

参考链接:

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论