Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Linux Compatibility

"We don't break user space."

--- Linus Torvalds

Asterinas is dedicated to maintaining compatibility with the Linux ABI, ensuring that applications and administrative tools designed for Linux can seamlessly operate within Asterinas. While we prioritize compatibility, it is important to note that Asterinas does not, nor will it in the future, support the loading of Linux kernel modules.

System Calls

At the time of writing, Asterinas supports over 220 Linux system calls for the x86-64 architecture, which are summarized in the table below.

NumbersNamesSupportedFeature Coverage
0read💯
1write💯
2open⚠️
3close💯
4stat💯
5fstat💯
6lstat💯
7poll💯
8lseek⚠️
9mmap⚠️
10mprotect⚠️
11munmap💯
12brk💯
13rt_sigaction⚠️
14rt_sigprocmask⚠️
15rt_sigreturn💯
16ioctl
17pread64💯
18pwrite64
19readv
20writev
21access💯
22pipe💯
23select
24sched_yield
25mremap⚠️
26msync⚠️
27mincoreN/A
28madvise⚠️
29shmgetN/A
30shmatN/A
31shmctlN/A
32dup💯
33dup2💯
34pause
35nanosleep
36getitimer
37alarm💯
38setitimer
39getpid💯
40sendfile
41socket⚠️
42connect⚠️
43accept
44sendto⚠️
45recvfrom⚠️
46sendmsg⚠️
47recvmsg⚠️
48shutdown
49bind⚠️
50listen
51getsockname💯
52getpeername
53socketpair⚠️
54setsockopt⚠️
55getsockopt⚠️
56clone⚠️
57fork
58vforkN/A
59execve💯
60exit
61wait4⚠️
62kill
63uname
64semget⚠️
65semop⚠️
66semctl⚠️
67shmdtN/A
68msggetN/A
69msgsndN/A
70msgrcvN/A
71msgctlN/A
72fcntl⚠️
73flock
74fsync
75fdatasync
76truncate
77ftruncate
78getdents
79getcwd
80chdir
81fchdir
82rename
83mkdir💯
84rmdir
85creat
86link
87unlink
88symlink
89readlink
90chmod
91fchmod
92chown
93fchown
94lchown
95umask
96gettimeofday
97getrlimit
98getrusage⚠️
99sysinfo💯
100timesN/A
101ptraceN/A
102getuid💯
103syslogN/A
104getgid💯
105setuid💯
106setgid
107geteuid💯
108getegid💯
109setpgid
110getppid💯
111getpgrp
112setsid
113setreuid
114setregid
115getgroups
116setgroups
117setresuid
118getresuid
119setresgid
120getresgid
121getpgid
122setfsuid
123setfsgid
124getsid
125capget⚠️
126capset⚠️
127rt_sigpending
128rt_sigtimedwaitN/A
129rt_sigqueueinfoN/A
130rt_sigsuspend
131sigaltstack
132utime
133mknod
134uselibN/A
135personalityN/A
136ustatN/A
137statfs
138fstatfs
139sysfsN/A
140getpriority
141setpriority
142sched_setparam
143sched_getparam
144sched_setscheduler
145sched_getscheduler
146sched_get_priority_max
147sched_get_priority_min
148sched_rr_get_intervalN/A
149mlockN/A
150munlockN/A
151mlockallN/A
152munlockallN/A
153vhangupN/A
154modify_ldtN/A
155pivot_rootN/A
156_sysctlN/A
157prctl⚠️
158arch_prctl⚠️
159adjtimexN/A
160setrlimit
161chroot
162sync
163acctN/A
164settimeofdayN/A
165mount⚠️
166umount2⚠️
167swaponN/A
168swapoffN/A
169rebootN/A
170sethostname
171setdomainname
172ioplN/A
173iopermN/A
174create_moduleN/A
175init_moduleN/A
176delete_moduleN/A
177get_kernel_symsN/A
178query_moduleN/A
179quotactlN/A
180nfsservctlN/A
181getpmsgN/A
182putpmsgN/A
183afs_syscallN/A
184tuxcallN/A
185securityN/A
186gettid
187readaheadN/A
188setxattr
189lsetxattr
190fsetxattr
191getxattr
192lgetxattr
193fgetxattr
194listxattr
195llistxattr
196flistxattr
197removexattr
198lremovexattr
199fremovexattr
200tkillN/A
201time
202futex⚠️
203sched_setaffinity
204sched_getaffinity💯
205set_thread_areaN/A
206io_setupN/A
207io_destroyN/A
208io_geteventsN/A
209io_submitN/A
210io_cancelN/A
211get_thread_areaN/A
212lookup_dcookieN/A
213epoll_create
214epoll_ctl_oldN/A
215epoll_wait_oldN/A
216remap_file_pagesN/A
217getdents64💯
218set_tid_address💯
219restart_syscallN/A
220semtimedop⚠️
221fadvise64
222timer_create⚠️
223timer_settime
224timer_gettime
225timer_getoverrunN/A
226timer_delete
227clock_settimeN/A
228clock_gettime⚠️
229clock_getresN/A
230clock_nanosleep⚠️
231exit_group💯
232epoll_wait
233epoll_ctl
234tgkill
235utimes
236vserverN/A
237mbindN/A
238set_mempolicyN/A
239get_mempolicyN/A
240mq_openN/A
241mq_unlinkN/A
242mq_timedsendN/A
243mq_timedreceiveN/A
244mq_notifyN/A
245mq_getsetattrN/A
246kexec_loadN/A
247waitid
248add_keyN/A
249request_keyN/A
250keyctlN/A
251ioprio_set
252ioprio_get
253inotify_initN/A
254inotify_add_watchN/A
255inotify_rm_watchN/A
256migrate_pagesN/A
257openat⚠️
258mkdirat
259mknodat
260fchownat
261futimesat
262newfstatat⚠️
263unlinkat
264renameat
265linkat
266symlinkat
267readlinkat
268fchmodat
269faccessat
270pselect6💯
271ppoll
272unshare
273set_robust_list💯
274get_robust_listN/A
275spliceN/A
276teeN/A
277sync_file_rangeN/A
278vmspliceN/A
279move_pagesN/A
280utimensat
281epoll_pwait
282signalfd
283timerfd_create
284eventfd💯
285fallocate
286timerfd_settime
287timerfd_gettime
288accept4
289signalfd4
290eventfd2⚠️
291epoll_create1
292dup3💯
293pipe2⚠️
294inotify_init1N/A
295preadv
296pwritev
297rt_tgsigqueueinfoN/A
298perf_event_openN/A
299recvmmsgN/A
300fanotify_initN/A
301fanotify_markN/A
302prlimit64💯
303name_to_handle_atN/A
304open_by_handle_atN/A
305clock_adjtimeN/A
306syncfsN/A
307sendmmsgN/A
308setns
309getcpu
310process_vm_readvN/A
311process_vm_writevN/A
312kcmpN/A
313finit_moduleN/A
314sched_setattr⚠️
315sched_getattr⚠️
316renameat2⚠️
318getrandom⚠️
319memfd_create
322execveat
327preadv2
328pwritev2
332statx
434pidfd_open
435clone3
436close_range
439faccessat2
441epoll_pwait2
  • Supported:

    • ✅ = syscall supported
    • ❌ = not supported
  • Feature Coverage:

    • 💯 = all flags/commands/modes are supported
    • ⚠️ = syscall works, but some flags/modes are not implemented
    • ❓ = implementation exists, but we have not audited its coverage yet
    • N/A = not applicable (e.g., syscall not supported)

Most of these system calls (or their variants) are also supported for the RISC-V and LoongArch architectures.

File Systems

Here is the list of supported file systems:

  • Devfs
  • Devpts
  • Ext2
  • Procfs
  • Ramfs

Sockets

Here is the list of supported socket types:

  • TCP sockets over IPv4
  • UDP sockets over IPv4
  • Unix sockets

vDSO

Here is the list of supported symbols in vDSO:

  • __vdso_clock_gettime
  • __vdso_gettimeofday
  • __vdso_time

Boot Protocols

Here is the list of supported boot protocols: