【转载】30岁文转码:我用了三年时间从哲学家变成知名软件项目核心开发

“曾经的我对技术一窍不通,但现在我已经掌握编程能力、开始努力争取自己的计算自主权。虽然还有很长的路要走,但我至少已经迈开了步伐。”

近日,自由软件基金会(FSF)宣布了 2021 年自由软件奖得主。该系列奖项在 LibrePlanet 2022 会议上颁发,得奖者主要是为软件自由事业做出重大贡献的个人、团队以及社区。鼓舞人心的是,非技术出身的 Protesilaos Stavrou(简称“Prot”)今年获得了“杰出新自由软件贡献者”奖项(Award for Outstanding New Free Software Contributor),该奖颁发给对自由软件社区作出杰出贡献的社区新成员。

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

是的你没看错,今天的主角 Prot 是热衷于研究哲学的文科生,出生于1998年,非技术背景,大学学的是人文学科,近几年才开始接触技术。因此,他对于自己获奖一事感到非常意外。

FSF 执行董事 Zo Kooyman 表示:“Protesilaos 对于那些社区中刚起步的人来说是一个非常鼓舞人心的榜样。这表明,一个人不需要有几十年的经验也可以为自由软件做出贡献,甚至成为特定项目的核心。”

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

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

他在几乎没有背景的情况下拿起它(Emacs 和 Lisp)的速度是惊人的。2016 年学习 Linux/UNIX,2019 年才开始使用 Emacs。另一个有趣的事实:他做那些教程视频的主要目的是练习他的英语。——BeetleB

GNU EMACS 是一个可扩展、可定制、免费、自由的文本编辑器。同时,它也是一个集成开发环境。根据 Prot 的自述,过去两年半里,他编写了几千行 Elisp 并为核心 Emacs 做出贡献,包括两个完整、辅助功能齐备的可定制主题——modus-themes。

“当我来到 Emacs 时,当我切换到 Emacs 时,当我两年半前加入这个环境时,我发现了我需要的一切。有高质量的文档,面向 GNU Emacs 的优秀程序,大量的博客和教程等等,当然还有与不同的人的互动,你总能从中学到新的东西。”Prot 在获奖感言中强调,“虽然这个奖项是授予个人的,但我认为这实际上是关于社区的——社区中所有的无名英雄,帮助着一个特定的人实现某些目标。”

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

以下内容节选自在 Prot 在 LibrePlanet 2022 会议上的演讲,他分享了自己为什么选择 Emacs 以及对于自由软件的体会和理解,希望能为读者带来启发。

成为 Emacs 的铁粉

这里我想聊聊自己为什么会成为 Emacs 的铁粉。种种高级功能和丰富的软件包当然很好,但这还不足以体现 Emacs 的精髓、特别是它真正的价值主张。毕竟目前大多数现代编辑器都具备插件系统,可以为用户提供几乎一切必要的临时功能,那 Emacs 的特别之处究竟在哪?

答案在于,Emacs 并不是真正的文本编辑器。它其实是一套可编程平台,文本编辑只是其中的主要交互点之一。

Emacs 是由 Lisp 的一种方言编写而成,名为“Emacs Lisp”、也叫“Elisp”。因此,它的绝大多数代码库以及用户配置也是用 Elisp 写成。这意味着对最终用户来说,Emacs 只涉及一种语言、只包含一种范式。于是乎,内置代码和用户开发的插件代码间没有任何区别,真正实现了语言风格上的大一统。

Emacs 的核心就是读取和运行 Elisp 的能力,这被称为评估「evaluation」。在评估 Elisp 时,Emacs 环境可以轻松使用与之对应的返回值。无需重新启动程序,这些扩展就能实时生效,帮助用户以交互方式即刻观察效果。

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

此外,Emacs 还是自文档化的,意味着它能理解变量的值何时发生变化、并在对应的帮助缓冲区中通知用户。同理,Emacs 也能反映出各类函数的新值与当前状况的关联。

最后,Emacs 是纯免费软件,直接提供内置工具及所有已安装包的完整源代码。如此一来,文档中的显示内容就和实际程序的执行内容融合了起来,毫无隔阂滞碍。

我把 Emacs 当成集成计算环境

我是 2019 年夏天起开始用 Emacs 的,之前对 Lisp 没有任何了解,编程水平也不高。我上大学时学的是人文学科,所有硬核技术都是最近几年才逐渐掌握的。

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

Emacs 通过自身及第三方包 / 自定义代码全面满足了我的一切需求。如果大家愿意稍微学学 Elisp,那 Emacs 可以说是蕴藏着无穷无尽的可能。下面,咱们就一起来看几个无需多高技术水平就能实现的常见工作流程:

使用补全框架对文件内容进行异步搜索,将结果放在专用缓冲区内并就地编辑。最后,把变更传播至所有相关文件。

捕捉当前电子邮件内容并据此生成待办事项。任务还可包含一条返回原始消息的链接,并能够在议程当中显示相应的预定日期与截止日期。

在 Dired 中标记某些文件,再将它们添加到正在撰写的电子邮件当中。Dired 可以逐个标记条目,也可以使用正则表达式和其他高级命令。

记录一组以 Dired 为起点的操作(「键盘宏」),跳转至特定文件,执行某些变更、返回文件管理器,再在下一个文件中重复这个过程。

在以上各种用例中,用户完全不需要学习任何新知识。例如,键盘宏等各类功能在哪里都能直接用。更重要的是,这些功能既能单独起效、也可以协同工作。

因此,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 学习之路就是从编写小型函数封装开始,用于调整某些默认操作的执行方式。我想补充“move down a line”(下移一行)命令的功能,让它能支持下移特定多行。Emacs 则可以实时评估代码,而且开放完整的源代码及相关说明文档。正是有了这样的开放性,我才能了解如何定义函数,再通过反复试验编写出人生中第一条自定义 Elisp。

之后,我又继续调整 Emacs,希望实现有益于自己日常工作的微小优化。在此期间,我逐渐掌握了 Elisp,并运用这些新知识得心应手地操作 Emacs。过去两年半里,我编写了几千行 Elisp 并为核心 Emacs 做出贡献,包括两个完整、辅助功能齐备的可定制主题,这就是 modus-themes。

换个角度来看,我在成为 Emacs 用户的头三个月里,学到的编程知识要比自己之前三年参与自由软件社区中还多。对我来说,这就是社区引导最终用户成长、满足最终用户需求的最佳案例。曾经的我对技术一窍不通,但现在我已经掌握编程能力、开始努力争取自己的计算自主权。虽然还有很长的路要走,但我至少已经迈开了步伐。

14 个赞

这个是什么?我感觉好像是讲那个 核武器级别的技巧 ,应该是这个意思吧

就上下文我认为这里的翻译 免费 应该翻成 自由 ……老梗了 :joy:

1 个赞

也不是处处的 free 都翻译成免费,有可能结合上下文,作者就是想表达免费的工具的意思。

配置语言和插件语言保持一致这一点就很容易吸引人做一些自定义方案。

我认为这个是Emacs/vim插件生态繁荣发展的原因。时常翻翻社区论坛看能不能找到有趣的包。

看其他IDE/代码编辑器的插件市场就感觉同质化严重,没有那种眼前一亮的存在。

2 个赞

应该是 自由软件, 因为结合上下文

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

此外,Emacs 还是自文档化的,意味着它能理解变量的值何时发生变化、并在对应的帮助缓冲区中通知用户。同理,Emacs 也能反映出各类函数的新值与当前状况的关联。

最后,Emacs 是纯免费软件,直接提供内置工具及所有已安装包的完整源代码。如此一来,文档中的显示内容就和实际程序的执行内容融合了起来,毫无隔阂滞碍。

作者想表达 Emacs 是可以自由修改的自由软件

1 个赞

转载请注明出处,想找个原文翻半天也没看到…

看起来这个中译版是译者基于 Prot 的演讲基础上,稍微加了一点东西。

演讲录像: https://www.youtube.com/watch?v=CQM-GWKdHsU&ab_channel=ProtesilaosStavrou

Org 正文:

#+TITLE: LibrePlanet 2022: Living in freedom with GNU Emacs
#+AUTHOR: Protesilaos Stavrou (https://protesilaos.com)

Hello LibrePlanet!  Hello folks!  My name is Protesilaos, also known as
"Prot".  I am joining you today from the mountains of Cyprus.  Cyprus is
a country in the Eastern Mediterranean Sea.

In this presentation I will explain how GNU Emacs has allowed me to live
in greater computing freedom.  Most of this talk will cover what Emacs
is, why it can help the user live in freedom, and how those relate to my
particular case.

There will also be some more theoretical insights.  They are not
specific to Emacs or computing in general, but will help us reason about
liberty both in its personalised experience and community-based
actuality.

The text I am reading from is provided to the organisers of this
conference.  Those interested will be able to retrieve it from the
relevant sources.

* A brief introduction to Emacs

Let's start with an overview of what GNU Emacs is.  At a surface level,
it is a capable text editor.  One can use it to do programming or write
prose.  Emacs has everything a user needs to perform these tasks, such
as efficient keyboard-driven motions, mouse support, spell checking and
code linting, line numbers to show where the focus is on the current
file, integration with the underlying operating system, and much more.

One can use Emacs as a generic text editor, if they want.  Though Emacs
is much more than that.  Here are some other highlights that are
provided by the official package:

- A thoughtful windowing or multiplexing facility so that the user can
  have different files or "buffers" displayed on the screen at once.

- A potent file manager or what is technically referred to as "directory
  editor" (=dired=).

- A comprehensive suite of tools for handling to-do lists, capturing and
  filing ideas or information, organising a daily agenda, establishing
  hyperlinks to all sorts of contexts to create a knowledge base or
  simply retrieve what is needed, and writing potentially technical
  documents with a lightweight-yet-powerful markup language.  This is
  the much-lauded "Org mode" and its numerous accoutrements.

- A framework to search through lists of candidates and narrow to a
  given item using simple or advanced pattern matching styles.

The list of features that are built in to Emacs is too long.  But that
is still not exhaustive, because Emacs is an extensible program.  There
are literally hundreds of third-party packages which provide additional
functionality to fill in practically every niche.  For example, there is
a superb package which provides a fully fledged interface to the Git
version control system (=magit=).  Or another nimble tool which centres
the contents of the buffer in the window (=olivetti=).  I am using
Olivetti right now for this presentation together with my own extras.

In short, Emacs is powerful out-of-the-box and it gets even better with
additional configuration.  All are available under libre terms.

* Emacs as a computing environment

Now I want to tell you why I was drawn to Emacs by explaining what
underpins all of the aforementioned features.

Packages with advanced functionality are nice to have, but they still do
not quite capture the essence of Emacs and what its true value
proposition is.  Besides, most modern editors have a plugin system to
give the user whatever piece of ad-hoc functionality they require.  So
what's so special about Emacs?

The answer consists in the fact that Emacs is not really a text editor.
It is a programmable platform where text editing is one of the main
points of interaction.

Emacs is written in a programming language that is a dialect of Lisp.
It is called "Emacs Lisp" or "Elisp".  The vast majority of the code
base is written in Elisp.  While this language is also used to apply all
user configurations.  For the end-user then, there is only one language,
one paradigm.  In other words, there is no distinction between the
built-in code and whatever code is provided by the user: everything is
done uniformly.

At the core of Emacs is the capacity to read and run Elisp.  This is
known as "evaluation".  When some Elisp is evaluated, its return value
becomes readily available to the environment.  There is no need to
restart the program: extensibility happens in real-time where the user
can discern the effects right away in an interactive fashion.

In this regard, Emacs is a Lisp machine that can be used to execute any
sort of program.  By "program" I mean anything from a powerhouse like
Org or Magit, to small-scale functions that streamline text editing
patterns and motions.

Furthermore, Emacs is self-documenting.  What this means is that it
understands when the value of a variable has changed and will inform the
user about it in the relevant Help buffer.  Same principle for
referencing other functions whose new value is relevant to the matter at
hand.

Lastly, Emacs is free software and provides the means to access the
entire source code both for the built-in tools as well as any installed
packages.  This bridges the gap between what the documentation says and
what the actual program is doing.

* I use Emacs as an integrated computing environment

I switched to Emacs in the summer of 2019, without any knowledge of Lisp
and with only a basic understanding of programming.  My background is in
the humanities and I was not a tech-savvy user until only a few years
ago.

I was drawn to Emacs because I recognised the potential of a Lisp
machine.  What I wanted was to develop a layer of integration between
the otherwise disparate tools I was using before for my day-to-day
computing.  I wanted a consistent theme, precise typography, the same
set of motions or patterns of interaction for everything.  Moreover, I
wanted to be able to draw linkages between the various contexts or
interfaces: my email client should talk directly to my task planner and
file manager, the configurations that apply to prose should also be
usable for programming, and the like.

Emacs makes all of this possible either out-of-the-box or with
third-party packages and custom code.  If the user is willing to learn
some Elisp, the possibilities are virtually endless.  Here are some
common workflows that can be achieved without too much knowledge:

- Use the completion framework to run an asychronous search for file
  contents, put the results in a dedicated buffer and edit them in
  place.  The changes will be propagated to all the affected files.

- Capture the contents of the email you are reading and produce a to-do
  item out of them.  This task can also have a link back to the original
  message and it may be assigned a scheduled date as well as a deadline,
  making it show up on the agenda.

- Mark some files in Dired and attach them to an email that is being
  composed.  Dired can mark items one by one or with regular expressions
  and more advanced commands.

- Record a set of motions (a "keyboard macro") which uses Dired as a
  starting point, jumps to a given file, makes some changes, returns to
  the file manager, and repeats the process for the next file.

In all those cases, the user does not need to learn something new.  For
instance, keyboard macros are the same everywhere.  Same principle for
all the other pieces of functionality.  They can be used on their own,
yet also work in concert.

Emacs thus makes it possible to connect the various interfaces without
any of the friction that context-switching causes.

-----

This ultimately is about ease-of-use and simplicity at scale.  For
example, I use my own custom code to do this presentation.  It takes a
section of the document and narrows the view to give the impression that
this is a pre-built slide.  It is not.  This is ordinary text that I can
edit right now.  So I am actually using a general purpose and minimalist
"focus mode" which is equally useful for presentations, reading,
writing, and programming.

Because I do everything inside of Emacs, I only have to implement this
once.  I don't need to have a bespoke focus mode for my email client,
then another for my text editor or text processor, a third for my agenda
planner, and so on.  Also, I don't need separate tools for writing and
presenting my text.  It is one and the same.  Nice and simple!

Add to this the fact that the underlying configuration is all done in
Elisp, which further contributes to the streamlining of the overall
result.  Whereas before switching to Emacs I had to use different
paradigms and/or languages for each application.  For instance,
Thurderbird and Libreoffice have their own settings menus that do not
talk to each other.  Mutt has another way of being configured; Vim
another one; Tmux yet another; the terminal emulator has its own; and so
on for practically every other application.

This is not to say that each of those applications is bad per se.  What
I am suggesting is that their combined use, their gestalt form, is not
optimal.  The user has to go to great lengths to piece together a system
out of all those silos of functionality.  And even with great effort and
all sorts of possible hacks, the result will still leave something to be
desired, as those programs do not share a common platform and do not
speak the same language (figuratively and literally).

Whereas with Emacs every new package automatically gets what all other
packages already have, such as the same font configurations and theme, a
common set of motions and patterns of interaction, and so on.  We then
get the network effect that engenders emergent workflows.  Everything
that happens inside of Emacs partakes in the same environment.  All
contexts are potentially interconnected and one may draw linkages at
will.  This does not involve fragile workarounds.  Integration and the
singular experience of consistency it yields is at the centre of the
value proposition of Emacs.

* Consistency and autonomy

Emacs is free software in terms of the license attached to it.  Though
the freedom it bestows upon the end-user is not limited to a legal
arrangement or an abstract moral value.  There is a practical aspect to
it, which is the integrated computing environment I already outlined.

The extensibility of Emacs empowers the user to make their computer do
what they actually want for a broad range of tasks.  While the
uniformity of Elisp lowers the barrier to entry, especially if we
contrast it with the multifaceted corpus of knowledge one needs to
possess in order to piece together applications with no shared basis.

Which brings me to the theme of this year's LibrePlanet about living in
freedom.  We want to appreciate liberty in its quotidian manifestation,
as an expression of agency in the here-and-now.  In this regard, Emacs
is a tool that we use to minimise the distance between what we think and
what the computer renders possible.

Freedom of software is about ownership of the means of computing.  It
enables the development of autonomy within this space, in the original
sense of the word as "self-rule".  We have autonomy when the tools we
use do what we want, instead of having their own hardcoded telos or,
worse, being employed in the service of an entity that operates outside
our control.

In practical terms, I always found the lack of integration between the
various applications I was using to be somewhat problematic.  I felt
like I was not getting the most out of my rights, as I could not make my
tools do exactly what I wanted.  Consequently, I was experiencing the
seemingly paradoxical case where an assortment of free software
applications was not leading to the maximisation of my autonomy.  The
emergent reality was not as good as the sum of the parts.  The
inconsistencies between those programs, or else their heterogeneity, was
not working in my favour.  Even though I was getting the maximum freedom
on paper, the actual outcome was only one of partial autonomy; an
/autonomy manqué/ or else the unfulfilled promise of liberty.

To put it differently, I was being alienated from my own tools and was
thus left in a position where I was not truly in charge: a state of
heteronomy (rule by another).

With Emacs, I managed to remove this heterogeneity and its resulting
heteronomy from my everyday computing.  Now I use Emacs for almost
everything: to read and write, manage my files, organise my task
planner, deal with my email correspondence, handle my music collection
and play back tracks, browse the Internet, and so on.  All contribute to
the singular experience I alluded to earlier.  The rare exception is
when I have to use a graphical Web browser.

-----

The general insight here is that freedom has two aspects to it: the
nominal and the substantive.  The former is about the license attached
to the code base.  While the latter pertains to the code /in vivo/: how it
can be used and how it relates to other programs in a given environment
or as part of a wider workflow.

I believe this has to make us reason about software freedom in the
expanded sense.  Consider code correctness, composability, and
extensibility as attributes of a program that together contribute to its
emancipatory function in practice.  We want the substance, not mere
conformity with legal requirements.

Consider the case of a program that comes with no documentation
whatsoever and is written in a way that makes the code difficult to
read.  It has a libre license but is otherwise not helping the user
experience autonomy.  The inner workings of the program make it hard for
the user to understand what is going.  In my experience, this is not
sufficient for living in freedom, because "living" in freedom involves
experiencing it, and "experiencing" is not limited to what a document
says about the applicable copyright terms.

What Emacs has taught me indirectly or perhaps inadvertently is that our
focus as a community must be the end-user.  We do not want to have freed
code that is operated by powerless users.  Instead, we want to teach the
user how they may assume stewardship over their own means of computing.
Free software must not be a mere alternative to proprietary code.  It
must incentivise a shift in attitude towards self-rule.  We should
strive to educate the user through the design of the program that they
can use what is offered to them in a way that makes sense for them and
not just the developer or provider.  Little by little, step by step, the
user will learn to seek freedom in everything and assume the requisite
responsibility.

The intent is to liberate the code from the familiar fetters of
copyright in order to give power to the user.  The code itself is not
the final goal.  As such, we must not limit our free software
contributions to a formulaic =COPYING= file that accompanies some source
code.  The "take it or leave it" approach does not empower the user or
anyhow lacks ambition.  It is of paramount importance to make the
program as accessible, configurable, and well documented as possible.
Then we have both an excellent program and one that is conducive to the
cause of freedom.

The ideal must then be to provide points of entry so that all programs
can be made to work in tandem.  The best outcome is for the user to be
in charge of the entirety of their computer and for everything to behave
as part of a greater whole.

* Freedom as a collective achievement

If we discern the common in the multitude of all freedoms and
concomitant rights, we find that freedom is two-fold: (i) the capacity
for initiative and (ii) the absence of control.  The first requires that
the agent can act, while the second entails that the impetus for it is
not provided, framed, or otherwise influenced by another agent.

Action necessarily involves an agent and a patient or what we have in
grammar as the subject and object of a verb.  For our purposes, human
action affects other humans or species.  Thus what is possible as just
action in this case is whatever does not create a form of control and
does not deprive others of their initiative.  Put differently, freedom
has a social aspect to it and, by extension, ethics belong to the field
of politics in the broader sense.  There is no action in a vacuum and
thus no qualitative aspects to be discerned thereof.

Freedom is thus realised through the collective.  The individual is but
a part of the bigger picture.  The realisation of freedom is a function
of what the collective enables through the rules it establishes and
upholds.  These can be laws or norms of conduct with varying scopes of
application.  Freedom is thus instituted as such: humans enact and
substantiate it.

As with the case of the free software program that needs to work for the
end-user's autonomy, so freedom in general is not simply what some
charter of fundamental rights declares.  There has to be a culture in
place.  The members of the collective must recognise each other's
capacity for initiative and must not try to impose any arbitrary
controls over it.

In short, we cannot have freedom simply by stating the rules.  We must
also educate the people to cherish and champion liberty.  Which is also
why conferences such as this one are important, as they raise our
community's self-awareness while bringing forth ideas and information
that are worthy of our common objectives.

We already know about the essence of freedom and its actuality as a
collective achievement through our participation in the free software
community.  We understand that every contribution we make or benefit
from is made possible by the work of others.  We are aware of the fact
that none of us can enjoy computing freedom as a decontextualised
individual.  No single person holds all the knowledge that goes into a
computer and all of its programs.  No one person can ever acquire such
knowledge that is not communicated in some way, which implies
interpersonal affairs or else the presence of the others beside the
self.

Ask yourself: "who am I without the community?".  The answer is "not
much; not enough".

* The Emacs community and how I became a contributor to core Emacs

Since my talk involves Emacs, we too have our own community.  By and
large, it welcomes newcomers and is eager to disseminate whatever
knowledge it holds.  The most obvious way the community helps the user
live in freedom is with the lofty expectations it maintains about the
quality of a package.  All decent Emacs packages come with detailed
documentation and they provide multiple options for the user to
configure things to their liking.

The Emacs community recognises that it must not impose controls over the
end-user's capacity for initiative.  Hence the extensibility and
customisability of all the relevant code.  The community also
understands the notion that freedom unfolds as an intersubjective
experience and that it is not sufficient to emancipate the code from
legal constraints.  As such, Emacs users promote a strong documentation
culture, where every Elisp form has to explain in ordinary language what
it does and every package must provide instructions on how to use and
configure it.  These are in addition to the four freedoms which we
expect as a minimum.

This is the "Emacs way" of doing things, which extends to the core
application.  The very design of Emacs as a Lisp machine empowers the
end-user, since everything is subject to evaluation anew.  For example,
I started learning Elisp by writing my little wrapper functions that
tweaked how some default motions behaved.  I wanted to have a complement
to the "move down a line" command where it would automatically move down
15 lines.  Emacs can evaluate code live and, as I said, it grants access
to the full source code as well as all the relevant documentation.  I
was thus able to learn how a function is defined and then through trial
and error write my first custom Elisp.

I continued tinkering with Emacs to implement various tweaks or micro
optimisations that made sense to me.  In the process I learnt to use
Elisp.  Equipped with that newfound knowledge I was able to do
practically everything I wanted with Emacs.  Over the past 2.5 years I
have written thousands of lines of Elisp and have made several
contributions to core Emacs, including a pair of comprehensive, highly
accessible, and customisable themes called the =modus-themes= (I am using
the light variant right now, which is called =modus-operandi=).

To put it in perspective, I learnt more about programming in my initial
three months as an Emacs user than what I had gathered in the three
years prior as a member of the free software community when I first
switched to a GNU/Linux operating system in mid-2016.  This, to me, is
the best example of catering to the needs of the end-user.  I, who was
once not a programmer or tech-savvy user, was gifted everything I needed
to learn how to program and to ultimately be in a position of autonomy
insofar as computing is concerned.  The rest is the hard work I put in
by doing things from scratch.

* Consider the bigger picture

Living in freedom demands that we broaden the scope beyond the narrow
confines of the individual and also transcend the technical requirements
of any one legal-institutional architecture to consider the context
holistically: the context of how the program is used as part of a
workflow; the context in which a user joins our community and wishes to
learn from the wealth of knowledge on offer; the context of how that
knowledge is conveyed; the context of freed code as instrumental to the
lifestyle change that brings about computing autonomy; the context of
how our individuality with its subjective conception of freedom is
contingent on the collective.

When we do this, when we look at the bigger picture, we understand that
what we really want is for everything that affects us to include our
involvement and to share our common values.  The goal is to live in
freedom, not be a cheerleader of freedom from the sidelines.

This means that we cannot enjoy genuine freedom in our own little
capsule, because we do not control the factors that contribute to the
state of affairs.  Private freedom, in a strict sense, is an illusion.
Additionally, we cannot really rollover the problem to some other
person.  That may remove whatever stigma from us but it merely
obfuscates the real problem where the cultural-institutional order
inhibits our liberty indiscriminately.  To remove the stigma is to
engage in role-playing, where you claim to be holier than others even
though the prevailing conditions remain illiberal.

Living in freedom, be it in the computing space or generally, implies
that we cannot afford to make tokenistic decisions.  Each of us is free
when the community delivers freedom; when the collective institutes
freedom as such.  Liberty is intersubjective.  It will remain incomplete
for as long as some are ostensibly more free than others.

In conclusion, there is an anti-imperialist Greek song that was recorded
in the 1980s and remains as relevant as ever---alas!  I feel it
expresses a profound insight in its chorus:

#+begin_quote
I fear everything that will be done for me without me.

---Vasilis Papakonstantinou - Fovamé (I fear)
#+end_quote

[ Check the Annex for a faithful translation of its lyrics. ]

On this note, I wish to thank you for your attention.  I also want to
express my gratitude to the organisers and volunteers of this year's
edition of LibrePlanet.  Goodbye folks!

* Annex: translation of "I fear" lyrics

This is not part of my presentation.  You might find it interesting and
relevant both for our era and ages past.

The original:

#+begin_verse
Μπροστά σου τα φώτα μιας πολιτείας
που περιμένει τις ανασκαφές
Και τα κλουβιά με τα καναρίνια που κοιμούνται βαλμένα στη σειρά
Κι εγώ που δεν έμαθα ακόμα ποιος είμαι
ένας κουρασμένος σκοπός, χωρίς προοπτική
Και συ που σε λίγο θα σβήσεις
ένα από τα φώτα, για να κοιμηθείς με κάποιον που μου μοιάζει
Έτσι που τα σίδερα του κλουβιού
να χαθούν για μια στιγμή, μέσα στο σκοτάδι

Φοβάμαι όλα αυτά που θα γίνουν για μένα χωρίς εμένα

Τα ρούχα μου παλιώσανε και δεν αντέχουν
τρύπες στα γόνατα από τις υποκλίσεις
τσέπες ξηλωμένες απ’ τα κέρματα
χαλασμένα φερμουάρ, χάσκουν χρεοκοπία
Το κορμί μου μελανιασμένο
μες το κρύο σαν λάθος που δεν το παραδέχεται κανένας
γυρνάει και ζητά τη ζεστασιά σου

Φοβάμαι όλα αυτά που θα γίνουν για μένα χωρίς εμένα

Τα τσιμέντα σου καινούρια
με έπιπλα λουστραρισμένα
Και μάρμαρα λευκά
μια γυαλάδα που στραβώνει
και δε σ’ αφήνει χώρο να σταθείς
και μόνο εγώ απ’ όλα εκεί μέσα
σαπίζω σαν σε αρχαίο τάφο
Σκεύη παραστάσεις βρέθηκαν εκεί
εκτός από εμένα, που σε κρύπτη μυστική
ψάχνω ακόμη να σε βρω να με αναστήσεις

Φοβάμαι όλα αυτά που θα γίνουν για μένα χωρίς εμένα

Τα ρούχα μου παλιώσανε και πέφτουν
σαν χρεοκοπημένες κυβερνήσεις
Γέρασα μ’ ένα παιδικό παντελονάκι
και το πλοίο δε φάνηκε ακόμη
Σε σφίγγω πιο πολύ γιατί κρυώνω
το κορμί μου δρόμος, που εκτελούνται δημόσια έργα
κομπρεσέρ μ’ ανοίγουν και με κλείνουν
Τράβα λίγο τη κουρτίνα να με δεις
έγινα διάδρομος για στρατιωτικά αεροπλάνα
Και το μυαλό μου, αποθήκη, για ραδιενεργά κατάλοιπα
Μέτρα ασφαλείας πήρανε, για την αναπνοή μου
και σε πολυεθνικό μονόδρομο
το μέλλον μου δώσαν αντιπαροχή

Φοβάμαι όλα αυτά που θα γίνουν για μένα χωρίς εμένα

Έτσι ζω προκαταβολικά το παρελθόν μου
και με δυο γυμνά καλώδια για χέρια
αγκαλιάζω τα ψηλά σου volt για στερνή φορά

Φοβάμαι!
#+end_verse

In English:

#+begin_verse
Before you lie the lights of a polity
that awaits the excavations
And the cages with the sleeping canaries lined up
And I who has yet to know who I am
a lost cause, with no perspective
And you who will soon switch off
one of the lights, to sleep with my look-alike
Such that the bars of the cage
vanish for a second, amid the darkness

I fear everything that will be done for me without me

My clothes are worn out and cannot hold together
holes at the knees from the kneeling
pockets ripped by the coins
broken zippers, staring at bankruptcy
My body bruised in the cold
like a mistake that none admits
turns and yearns for your warmth

I fear everything that will be done for me without me

Your cements are new
with polished furniture
And white marble
a blinding shininess
that leaves no room to stand
and only I out of everything there
rot as if in an ancient tomb
Implements of performances found there
except me, who in secret crypt
continue searching for you to resurrect me

I fear everything that will be done for me without me

My aging clothes are falling apart
like bankrupt governments
I grew old wearing a child's pair of pants
yet the ship hasn't appeared yet
I embrace you more tightly as I'm cold
my body is a road where public works are performed
drills open me up and seal me
Pull the curtain slightly to look at me
I've been turned into a runway for military aeroplanes
And my mind, a storage place, for radioactive waste
Security measures have been adopted for my breath
and on a [corporate] multinational one-way street
my future was given away

I fear everything that will be done for me without me

I thus live my past in advance [what has transpired is to be experienced again]
and with two stripped cables for hands
embrace your high voltage for the last time

I fear!
#+end_verse

PS: 话说可以把这个中译版开放编辑权限,大家可以一起编辑这个文本,吸引更多的 Emacs 用户。

这里的年份写错了,是 1988 年。

原文:30岁文转码:我用了三年时间从哲学家变成知名软件项目核心开发_腾讯新闻

一起编辑文本这个建议很好,但我不知道怎么开放这个编辑权限。

有人知道怎么操作吗?

应该是这样:

  1. 点右下角三个点
  2. 点击扳手
  3. 点设为 wiki

Screen Shot 2022-03-27 at 10.58.57

2 个赞

好家伙 我就说他那一脸大胡子咋还能这么年轻呢

2 个赞

88年其实也算年轻, 大胡子应该是Emacs的副作用(

7 个赞

我没发现扳手图标

我之前在知乎专栏介绍过Protesilaos Stavrou的。

他从Windows基本操作都不会的办公室职员成为Emacs硬核玩家的速度太快了。

6 个赞

这老哥的履历也是非常有趣了, 他之前在 EU 议会当过公务员, 后来去了山里面一边种地一边写代码.

2 个赞

modus theme的作者呀,有意思 :+1:t2: 没想到这么年轻,完全没有技术背景就搞elisp,还是蛮佩服的。其他方面都是soft skill吧,这也正是国人尤其是engineer缺乏的。厉害!

1 个赞

这个才是原文吧

2 个赞

是这篇。附上就好。全英文太长了,读起来比较累,尤其是用词比较复杂的情况下。索性贴中文让大家来找bug。