#syscalls #low-level #operating-systems #kernel #calls #abi

cloudabi

CloudABI的低级别接口。包含所有系统调用和相关类型。

4个版本

0.1.0 2019年12月22日
0.0.3 2018年1月10日
0.0.2 2018年1月4日
0.0.1 2017年12月24日

183操作系统 中排名

Download history 45457/week @ 2024-03-25 43510/week @ 2024-04-01 34751/week @ 2024-04-08 38170/week @ 2024-04-15 36639/week @ 2024-04-22 39683/week @ 2024-04-29 35858/week @ 2024-05-06 39358/week @ 2024-05-13 45180/week @ 2024-05-20 34408/week @ 2024-05-27 34800/week @ 2024-06-03 31928/week @ 2024-06-10 33691/week @ 2024-06-17 31654/week @ 2024-06-24 30663/week @ 2024-07-01 32846/week @ 2024-07-08

130,667 每月下载量

BSD-2-Clause

105KB
1.5K SLoC

请注意:整个crate以及此文档都是自动从cloudabi.txt生成的

Nuxi CloudABI

CloudABI是当你将POSIX、添加基于能力的安全和删除所有与此不兼容的东西所得到的结果。结果是只包含49个系统调用的最小ABI。

CloudABI没有自己的内核,而是实现在现有的内核中:FreeBSD为x86-64和arm64提供了CloudABI支持,并且还有NetBSD的补丁集Linux的补丁集。这意味着CloudABI二进制文件可以在不同的操作系统上执行,而无需任何修改。

基于能力的安全

基于能力的意味着进程只能执行没有全局影响的行为。进程不能通过绝对路径打开文件,不能打开网络连接,也不能观察全局系统状态,如进程表。

进程的能力完全由其打开的文件描述符集合(fds)确定。例如,只有在进程已经有一个指向文件所在目录的文件描述符时,才能打开文件。

与POSIX不同,在POSIX中,进程通常以文件描述符0、1和2(分别用于标准输入、输出和错误)保留,CloudABI不保留任何文件描述符数字用于特定目的。

在CloudABI中,进程依赖于其父进程以正确的资源集合启动它,因为进程将无法打开任何新的资源。例如,一个简单的静态Web服务器需要使用一个指向TCP监听器的文件描述符和一个指向要提供文件的目录的文件描述符来启动。Web服务器然后将无法做任何事情,除了在该目录中读取文件和处理传入的网络连接。

因此,可以安全地执行未知的CloudABI二进制文件,无需使用容器、虚拟机或其他沙箱技术。

观看Ed Schouten在32C3上的演讲,了解更多关于UNIX能力安全性的信息。

Cloudlibc

Cloudlibc是C标准库的实现,不包括所有与CloudABI不兼容的函数。例如,Cloudlibc没有printf,但有fprintf。它没有open,但有openat

CloudABI-Ports

CloudABI-Ports是一组常用库和应用程序到CloudABI的端口。它包含诸如zliblibpngboostmemcached等软件。这些软件被修复以不依赖于任何全局状态,例如/etc/dev中的文件,使用open()等。

使用CloudABI

使用CloudABI的说明(包括内核模块/补丁、工具链和端口)适用于多个操作系统

ABI规范

整个ABI规范在名为cloudabi.txt的文件中,从中生成所有头文件和文档(包括你现在正在阅读的文档)。

依赖关系

~105KB