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 230 Linux system calls for the x86-64 architecture, which are summarized in the table below.

NumbersNamesSupportedFlag 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💯
58vfork💯
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_sigtimedwait💯
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
169reboot⚠️
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_init💯
254inotify_add_watch⚠️
255inotify_rm_watch💯
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_init1⚠️
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
306syncfs💯
307sendmmsg⚠️
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💯
452fchmodat2💯
  • Supported:

    • ✅ = syscall supported
    • ❌ = not supported
  • Flag 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: