Self-contained Linux applications with lone lisp

Published on Jul 9, 2024

Lisp

Matheus Moreira 创建了 lone lisp 项目,旨在为 Linux 制定一个独立的 Lisp 语言和环境,支持任意的 Linux 系统调用,以便能够实现任何程序而无需外部依赖,并且能够在不同的 Linux 系统上运行。

摘要

Matheus Moreira 发起了 lone lisp 项目,目的是在 Linux 环境中创建一个独立的 Lisp 语言和环境。该项目通过支持任意的 Linux 系统调用,使得开发者能够在没有任何外部依赖的情况下实现任何程序,并且能够在任何 Linux 系统上运行。该语言已经达到了一个重要的里程碑:可以创建完全自包含的 Linux 应用程序,这些应用程序完全用 Lisp 编写,并且可以直接嵌入到 lone lisp 解释器中,无需修改即可在任何相同架构的 Linux 系统上运行。

作者通过一个简单的 env 实现示例,展示了如何将 Lisp 代码嵌入到解释器中,并且通过 lone-embed 工具将其转换为自包含的程序。通过 strace 跟踪系统调用,可以看到程序输出是直接从内存中写出的,而不是从文件系统中读取,这表明代码被嵌入在了执行文件本身的末尾。

通过分析 ELF 段(ELF segments),作者解释了如何通过创建一个自定义的 LONE 段来实现代码的嵌入。这个 LONE 段不是加载段,因此没有对齐的要求,可以精确描述嵌入的代码。Linux 操作系统通过辅助向量(auxiliary vector)告诉程序 LONE 段的位置,从而使得解释器能够在运行时找到并加载嵌入的代码。

作者还提到了 lone-embed 工具的重要性,它是一个专门为此目的构建的 ELF 修补工具,负责将 Lisp 代码嵌入到 ELF 文件中,并创建相应的 LONE 段。为了实现这一点,作者依赖于 mold 链接器的特性,它允许在 ELF 文件中预留空白的程序头部,以便后续可以添加新的段。

观点

  1. lone lisp 项目的目标是在 Linux 系统中创建一个不依赖于外部依赖的 Lisp 语言和环境,从而能够实现任何程序。
  2. 通过 lone-embed 工具,可以将 Lisp 代码嵌入到 lone lisp 解释器中,创建出完全自包含的 Linux 应用程序。
  3. 嵌入的 Lisp 代码存储在执行文件的末尾,通过 LONE 段的机制,解释器能够在运行时直接从内存中加载和执行这些代码。
  4. **LONE 段是一个自定义的 ELF 段类型,它允许精确描述嵌入的代码,并且通过辅助向量,解释器可以找到这个段的位置和大小。
  5. lone-embed 工具依赖于 mold 链接器的特性,该链接器允许在 ELF 文件中预留空白的程序头部,以便后续可以添加新的段。
  6. mold 链接器的这一特性对于 lone-embed 工具的功能至关重要,目前它是唯一支持这一功能的链接器。
Read Original Article

《Maeiee成长感悟》- 从北漂到准父亲的生活洞察

生活在快速节奏的都市,作为程序员和即将迎来人生新角色的我,经历了无数难忘的瞬间和深刻的思考。这些体验和感悟,我渴望与你分享。

《Maeiee成长感悟》是一个收集我所有重要生活事件和心得的地方。每一篇文章都是对过去经历的反思和对未来生活的展望,真实记录作为一个程序员、副业探索者、终身学习者、一个准爸爸和一个北漂的多重身份之间的平衡与挑战。

这里没有华丽的辞藻,只有最真实的思考和感受,希望它们能触动你的心弦,也许能在你的生活旅程中提供一些启示和慰藉。