Hacker News new | past | comments | ask | show | jobs | submit login
The Zig programming language has been ported to SerenityOS (twitter.com/awesomekling)
263 points by eatonphil on Dec 12, 2022 | hide | past | favorite | 35 comments



Hello friends! For more details, here's a blog post that sin-ack wrote about the porting work: https://sin-ack.github.io/posts/sycl-talk-20221007/

He also gave an in-person talk about Zig on SerenityOS at Software You Can Love 2022, there's a video of the talk here: https://www.youtube.com/watch?v=Ug3p8vELJqQ


Finally gave the build a go and really enjoyed playing around with it! Hope to contribute back someday. Kudos for all the progress.


Can we have a stable syscall ABI yet for third party applications? :P


No but you can call our POSIX C library whenever you want :^)


I had a chat with AK over on Mastodon and seems like dynamic linking libc should work just fine for cross compilation targeting SerenityOS!


Hello is this the AK thread? :)


i'm in the right place so!


Y’all just keep crushing it! :100:

I remain hopeful that one day some company will acquire Serenity and ship SerenityOS to millions and millions of people. Idk if that is even aligned with what the people of SerenityOS wish for, but I think it would be very cool if that was to happen :D


>some company will acquire Serenity

JS interpreter on Start Menu when?


I wasn’t thinking of MSFT but sure if that’s what’s gonna happen then that’s what’s gonna happen :)


> I remain hopeful that one day some company will acquire Serenity and ship SerenityOS to millions and millions of people.

Who would want to acquire this exactly? This frankly sounds like the most devoid of all comments I have ever read and the furthest from reality.

Any hobbyist OS fanatic would have said the exact same thing about GNU/Hurd, Haiku, HelenOS, ToaruOS, RedoxOS, etc. This is not 2005 anymore.


It is Open Source. Why does it have to be acquired?


Because turning it into a workable product takes time, money and effort.

As brilliant as SerenityOS is, it's still missing huge swaths of functionality people take for granted these days. Things like WiFi and GPU drivers and good audio/video decoders in the web browser, for example.


A totally new kernel and a totally new systems operating language. Cool!


Awesome to see new technology being boldly adopted and tried, we need variety in this space. Kudos.


From the look of the PR, does this mean they ported LLVM to Serenity, so all languages that build to LLVM will work? Or am I way off the mark?


Surely even for a language with a very light runtime, the startup routines need to understand Serenity and so that's actual porting work, and if your runtime has any heft to it, or you supply standard libraries that do anything (e.g. an allocator, file I/O, networking) that all needs porting to Serenity as well.

So for example C freestanding or Rust "no-std" will "work" but you can't do very much, freestanding doesn't have this idea of you "running" a program since that implies the existence of some supervisory agent, the resulting machine code generally gets burned into a ROM, or whatever.

The full blown hosted C, or Rust's std needs a bunch of porting, each is separate, the fact you made C's fopen() work doesn't magically make Rust's File APIs work so the fact Zig stuff works doesn't make Clang or rustc deliver their hosted/ std environments.


> freestanding doesn't have this idea of you "running" a program since that implies the existence of some supervisory agent

It's perfectly possible to build freestanding Linux programs. The only thing you need is exactly one system call function to get access to every single Linux kernel functionality. All this function needs to do is move parameters to specific registers, execute a system call instruction and return the result. With this single function, a freestanding program can do anything.

This is possible on Linux because it has a stable system call ABI. Other systems don't have that, they make people link to system libraries. Not sure what SerenityOS does but I assume they provide C++ OS libraries.


SerenityOS is a monorepo, so as long as the entire OS + userland compiles, they don't really have a stable ABI yet.


This is where it helps to have a firm grasp of what running on bare metal is, so you can better understand what an OS really does. You have some code that runs on a CPU, but beyond that how do you actually talk to anything else? There's an address bus so you can use memory without much trouble, but you have to know where the RAM is mapped.

So yeah, there's a big step from compiling machine code to working correctly with a particular OS.


All these “alternative” OSes are nothing more than toy’s because generally it seems the devs working on them have no desire whatsoever to make them run on bare metal. Just a toy that boots up in a VM completely dependent upon a host OS.


There are plenty of examples of people running Serenity on physical hardware. It probably doesn't support a fraction of the HW that Linux supports, but still.


I just think that people generally have pretty high expectations of OSes these days. So the job of getting it to run on actual hardware, and getting it to run on lots of hardware is just kicked down the road until the OS is a lot more mature.


All these alternative OSes are people having fun, they don't have any agenda to take over the computing world.

So in a sense, yes, they are toys for grown ups.


I don't think Serenity has a set purpose. No one is going around calling it a viable alternative to Linux. That's ok though. In the future, who knows what will happen to it. There is no need for it to have good support for baremetal at this stage.


Wow, excellent.


Nice! There's some work on porting it to Plan 9 too.


That's being done by like one guy, too. It's pretty impressive imo despite being incomplete.


Is zig being considered for writing core modules?


I hope not, having a consistent ecosystem where all parts of the system share the same building blocks is one of the beautiful aspects of SerenityOS.

For example in this video Andreas implements palette support for commands (commands are usually shown in the menu bar or contextual menus) and it has the nice side effect of immediately enabling them on every GUI program, even the desktop itself!

https://www.youtube.com/watch?v=LAqGLkRCFb8

I think Zig can be a polite guest in SerenityOS thanks to Zig's general interest in supporting uncommon targets, but the hosts are C++ and Jakt.



judging by past answers given, no. this is just so you can develop on serenity using zig, but anything in-tree needs to be C++ (or Jakt once that's ready)


Jakt seems to at least be ready enough to write Nintendo emulators. :)


It's more about integration into the rest of the system. E.g. the jakt and serenity string classes differed, so now the old string class has been deprecated and replaced by the jakt one. I'm not actively involved in the project though so I couldn't tell you much more than that


Thanks for the shout-out, Andreas!




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: