Cosmopolitan项目的名称本身就体现了其愿景——创建一个不受传统限制的自由软件环境。通过这种方式,Cosmopolitan希望使C语言成为一个真正的“编写一次,到处运行”的语言,这对于新项目的起步开发(greenfield development)尤其有价值。
技术实现
Cosmopolitan项目的技术实现非常巧妙。它利用了UNIX Sixth Edition shell脚本的特性,该脚本没有使用shebang行,从而允许将Windows Portable Executable(PE)文件编码为UNIX shell脚本。这意味着,通过特定的编译器配置,可以在Linux上生成能够在多个平台上运行的二进制文件,而无需依赖特定的操作系统界面API。

编译示例
Cosmopolitan提供了一个编译示例,展示了如何使用GCC编译器生成这种跨平台的二进制文件。这个过程涉及到一系列的编译器选项,包括禁用位置无关代码(PIE)、静态链接、以及指定二进制格式等。
平台无关的C/C++/FORTRAN工具链
Cosmopolitan项目还提供了一种平台无关的工具链,使得跨平台的本地构建变得异常简单和经济。例如,Cosmopolitan生成的可执行文件大小远远小于Go语言的“Hello World”程序,这表明了其在资源利用上的高效性。
PKZIP可执行文件作为容器
Cosmopolitan项目还探索了使用PKZIP格式作为可执行文件的容器。由于PKZIP的设计允许在文件末尾放置其魔术标记,因此可以在ZIP文件中合成ELF/PE/MachO二进制文件。这不仅使得单个文件可执行文件成为可能,而且还可以在Windows 10中将文件扩展名更改为.zip,并使用Microsoft的ZIP GUI打开它,从而提供了在编译后轻松编辑资源的灵活性。
x86-64 Linux ABI作为通用语言
Cosmopolitan项目还强调了x86-64 Linux ABI作为通用语言的重要性。由于硬件架构的共识,以及Linux内核中定义的系统调用(SYSCALL)ABI,Cosmopolitan项目认为现在是系统工程的最佳时期,我们比以往任何时候都更倾向于共享共同的事物。
长期维护与兼容性
Cosmopolitan项目还考虑到了软件的长期维护和兼容性。通过使用已经达成数十年共识的二进制接口,并忽略API,Cosmopolitan希望能够创建出能够经受时间考验的软件,而无需进行大量的维护工作。
总的来说,Cosmopolitan项目是一个雄心勃勃的尝试,它试图通过创新的技术手段,为软件开发者提供一个更加自由、灵活且高效的开发环境。通过这种方式,Cosmopolitan希望能够推动软件开发的进步,让跨平台开发变得更加容易和普遍。