<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/show-hn-i-ve-updated-my-linux-system-call-website-and-api-kathco8bh" -->

---
title: Show HN: I've updated my Linux System Call website and API
description: This site publishes Linux syscall tables for 27 architectures, covering kernel releases from 3.3 to 7.3. Each architecture page lists every syscall number, its...
canonical: https://daily.dev/posts/show-hn-i-ve-updated-my-linux-system-call-website-and-api-kathco8bh
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Show HN: I've updated my Linux System Call website and API | daily.dev
og:description: This site publishes Linux syscall tables for 27 architectures, covering kernel releases from 3.3 to 7.3. Each architecture page lists every syscall number, its...
og:url: https://daily.dev/posts/show-hn-i-ve-updated-my-linux-system-call-website-and-api-kathco8bh
og:image: https://api.daily.dev/og/posts/KAthcO8bH.png
og:image:alt: Show HN: I've updated my Linux System Call website and API
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Show HN: I've updated my Linux System Call website and API

**[Hacker News](https://daily.dev/sources/hn)** · 3 min read · 0 upvotes · 0 comments

## Summary

This site publishes Linux syscall tables for 27 architectures, covering kernel releases from 3.3 to 7.3. Each architecture page lists every syscall number, its arguments, registers and calling convention instruction, such as 'syscall' on x64 or 'svc #0' on arm64. x86_64 has 369 syscalls while x86 has 441. Data is read directly from kernel source, including the SYSCALL_DEFINE macros, and each table is also downloadable as JSON showing when a syscall was added or removed. A REST API lets you query any kernel release or diff between releases, for example 'curl https://api.syscall.sh/v2/syscalls/x64/read'.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://syscall.sh/>

## Questions this post answers

### What instruction does arm64 Linux use to make a system call?

ARM64 Linux enters the kernel with the 'svc #0' instruction. The same instruction is used on 32-bit ARM EABI. By contrast, x86_64 and x32 use 'syscall', while x86 and the IA-32 compatibility mode on x86_64 use 'int 0x80', and RISC-V 64-bit uses 'ecall'.

_Comparing syscall conventions across CPU architectures is easier when the details are tracked on daily.dev._

### How many syscalls does x86_64 Linux have compared to 32-bit x86?

x86_64 (x64) has 369 syscalls, while 32-bit x86 (i386) has 441. The x64 table has been tracked since kernel 3.3, and the x86 table since the same release. The x32 ABI on x86_64 also has 369 syscalls, tracked since kernel 3.4, while the IA-32 compat layer on x86_64 has 439.

_Developers porting low-level code across architectures can follow these kernel details on daily.dev._

### Where do syscall numbers and arguments for different Linux architectures come from?

They are read directly from the kernel source: a generator walks each architecture's syscall table and its SYSCALL_DEFINE macros across every mainline release scanned, producing the exact numbers the kernel dispatches on. Short descriptions come from the Linux man pages project, and io_uring descriptions come from the liburing project.

_Tracking how kernel internals like syscall tables evolve release to release is simpler on daily.dev._

## Community take

How the wider developer community reacted, aggregated from 2 discussions and 106 comments across hackernews (as of 2026-11-02).

**TL;DR:** Reception is largely appreciative of the syscall reference and API as a handy resource, with most of the discussion devoted to a tangential debate about whether near-duplicate syscalls should really count as distinct, plus assorted technical corrections and feature requests.

**Sentiment:** 30% positive · 55% mixed · 15% skeptical

**The case for**

- Seen as a useful, accurate reference pulled directly from kernel source, especially for CTF players and libc developers.
- People appreciate that it's actively maintained again after being stale for years.
- Several found it handy for learning assembly/architecture-specific calling conventions.
- One commenter built a similar site for Windows syscalls, showing the idea resonates.

**The pushback**

- Debate over whether grouping near-identical syscalls (read/readv/pread, pipe/pipe2, open/openat) as separate entries inflates the perceived syscall count.
- A correction was raised that x86_64 calling convention notes don't mention clobbered registers (rcx, r11).
- Another correction noted the syscall number goes in eax not the full rax register.
- One person said the site interferes with their browser graphics.
- A commenter noted it seemed to be missing some newer x64 syscalls, questioning how up to date it is.

**By community**

- hackernews (mixed): Appreciation for the resource is mixed with a long, somewhat heated side debate about syscall counting/classification plus several technical nitpicks and feature suggestions the author engaged with directly.
- hackernews (positive): Smaller thread is mostly positive and constructive, with praise, a comparison to a similar Windows tool, and minor technical corrections and feature requests.

**Hottest debate:** Whether syscalls that are functionally similar or evolved from one another (e.g., pipe/pipe2, open/openat, read/readv) should be counted as distinct syscalls or treated as a smaller effective number.

**Open questions**

- Is there a rigorous way to measure similarity between syscalls, and would that even be meaningful?
- How often is the underlying dataset refreshed and how can its accuracy/staleness be verified?
- Why do syscall numbers differ across architectures instead of being unified?

**Highlights**

> Yes, the ioctl has been notorious for sneaking in arbitrary amount of functionality into the kernel space, and serving generally as a kitchen sink: "You can rarely convince Linus to make a new syscall, but making a new ioctl is much easier". That's still one syscall though. And how do you even compare how the distinct the syscalls are (e.g., pipe() and open() are about 70% similar)? And after that, what do you do with this metrics? How do you sum it up? Again, pipe() and open() are 70% similar — does that mean we have 1.3 syscalls instead of 2?
> — [Joker\_vD on hackernews · 1 comments](https://news.ycombinator.com/item?id=50335467)

> I think you're missing the point I'm trying to make. Both pipe2 and openat has about 70% similar functionality (and so do the IORING_OP_PIPE and IORING_OP_OPENAT operations) — really, the only difference is that pipe2 returns two new fds instead of just one, and that the file opened is not a regular file. So, are those 2 syscalls or 1.3? What about triples or quadruples of syscalls with overlapping functionality, do we go full inclusion-exclusion formula on them? What about that 70% similarity estimation — how do establish that? Do you count the similarity/overlap of the underlying implementations? Only of the user-facing functionality? Both, somehow? Something else entirely? Or, you know, we can instead not engage in this subjective quagmire and look at the actual, factual number that undeniably exists. It may not be very useful for any practical purpose except for pointless dick-measuring between OSes with radically different APIs and internal architectures — but neither is this trying to measure syscall similarity, really.
> — [Joker\_vD on hackernews · 1 comments](https://news.ycombinator.com/item?id=50335795)

> That's right. Moreover, for a large number of traditional Linux syscalls (including the many variants of read/write/send/recv) there are now better alternatives that are invoked as subcommands of a single syscall: io_uring_enter.
> — [adrian\_b on hackernews · 1 comments](https://news.ycombinator.com/item?id=50335448)

> On x86_64 and x32, the syscall number goes in eax, not rax. The upper 32 bits of rax are ignored and can be anything.
> — [bkallus on hackernews · 1 comments](https://news.ycombinator.com/item?id=50335608)

> x64 clobbers rcx and r11, I don't see that mentioned in the calling convention. I'm not confident whether the other architectures have additional clobbers.
> — [JonChesterfield on hackernews · 1 comments](https://news.ycombinator.com/item?id=41023937)

**Source threads**

- [hackernews](https://news.ycombinator.com/item?id=50334704) · 141 points · 84 comments
- [hackernews](https://news.ycombinator.com/item?id=41023138) · 68 points · 22 comments

## Similar posts on daily.dev

- [How a System Call Actually Works in Linux](https://daily.dev/posts/how-a-system-call-actually-works-in-linux-kj1mr4pdv) · freeCodeCamp · 1 upvotes · 0 comments
- [Reworked System Call Entry Handling Slated For Linux 7.3](https://daily.dev/posts/reworked-system-call-entry-handling-slated-for-linux-7-3-du1elv5ms) · Phoronix · 0 upvotes · 0 comments
- [Linux Developers Looking At Retiring The x32 ABI](https://daily.dev/posts/linux-developers-looking-at-retiring-the-x32-abi-yx4prk9n4) · Phoronix · 0 upvotes · 0 comments
- [Main changes, Arm, RISC-V, and MIPS architectures](https://daily.dev/posts/main-changes-arm-risc-v-and-mips-architectures-eds3j61xx) · CNX Software · 0 upvotes · 0 comments
- [TIL: Number in man page titles \(e.g. sleep\(3\)\)](https://daily.dev/posts/til-number-in-man-page-titles-e-g-sleep-3--kcvhscujr) · Hacker News · 3 upvotes · 1 comments

---

Tags: [#linux](https://daily.dev/tags/linux), [#architecture](https://daily.dev/tags/architecture), [#hardware](https://daily.dev/tags/hardware)

[View this post on daily.dev](https://daily.dev/posts/show-hn-i-ve-updated-my-linux-system-call-website-and-api-kathco8bh)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Show HN: I've updated my Linux System Call website and API","url":"https://daily.dev/posts/show-hn-i-ve-updated-my-linux-system-call-website-and-api-kathco8bh","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/show-hn-i-ve-updated-my-linux-system-call-website-and-api-kathco8bh"},"datePublished":"2026-11-02T16:05:39.545Z","dateModified":"2026-11-02T16:06:16.868Z","description":"This site publishes Linux syscall tables for 27 architectures, covering kernel releases from 3.3 to 7.3. Each architecture page lists every syscall number, its...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/0c358892a6d18a13f31fadb072207dd6?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/0c358892a6d18a13f31fadb072207dd6?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Hacker News","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Hacker News","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/hn","url":"https://daily.dev/sources/hn"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/show-hn-i-ve-updated-my-linux-system-call-website-and-api-kathco8bh","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"linux,architecture,hardware","timeRequired":"PT3M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Hacker News","item":"https://daily.dev/sources/hn"},{"@type":"ListItem","position":3,"name":"Show HN: I've updated my Linux System Call website and API"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/show-hn-i-ve-updated-my-linux-system-call-website-and-api-kathco8bh#faq","mainEntity":[{"@type":"Question","name":"What instruction does arm64 Linux use to make a system call?","acceptedAnswer":{"@type":"Answer","text":"ARM64 Linux enters the kernel with the 'svc #0' instruction. The same instruction is used on 32-bit ARM EABI. By contrast, x86_64 and x32 use 'syscall', while x86 and the IA-32 compatibility mode on x86_64 use 'int 0x80', and RISC-V 64-bit uses 'ecall'. Comparing syscall conventions across CPU architectures is easier when the details are tracked on daily.dev."}},{"@type":"Question","name":"How many syscalls does x86_64 Linux have compared to 32-bit x86?","acceptedAnswer":{"@type":"Answer","text":"x86_64 (x64) has 369 syscalls, while 32-bit x86 (i386) has 441. The x64 table has been tracked since kernel 3.3, and the x86 table since the same release. The x32 ABI on x86_64 also has 369 syscalls, tracked since kernel 3.4, while the IA-32 compat layer on x86_64 has 439. Developers porting low-level code across architectures can follow these kernel details on daily.dev."}},{"@type":"Question","name":"Where do syscall numbers and arguments for different Linux architectures come from?","acceptedAnswer":{"@type":"Answer","text":"They are read directly from the kernel source: a generator walks each architecture's syscall table and its SYSCALL_DEFINE macros across every mainline release scanned, producing the exact numbers the kernel dispatches on. Short descriptions come from the Linux man pages project, and io_uring descriptions come from the liburing project. Tracking how kernel internals like syscall tables evolve release to release is simpler on daily.dev."}}]}
```

