airyxOS Pygmy Marmoset
Developer Preview Release v0.4.0pre2
0.4.0 brings substantial changes to the internals of airyxOS as well as some new GUI features, updates, and bug fixes. This is a big one, so please read carefully.
As usual, this is an unstable pre-release of upcoming stuff intended for people helping build airyxOS. It is not complete. It contains bugs - sometimes serious ones. It might spontaneously panic & reboot, melt your computer, eat your cat, or cause a universe-destroying wormhole. You have been warned.
Also please note that the ISO currently does not boot into a GUI. You will see the boot messages and then it will appear to freeze. Switch to tty1 (Alt+F2 usually) for a login prompt. The login is
liveuserwith no password.
airyxOS has been rebased onto the 13.0-STABLE branch of FreeBSD. In addition, the extra packages built from ports were updated to the 2022Q1 branch. This is expected to improve hardware support for airyxOS, but please expect some instability as we work out the bugs from this major update.
There is now kernel support for Mach ports, port rights, messages, IPC including OOL descriptors, and system calls. This is provided by a kernel module,
mach.ko, which is (and must be) loaded at boot time by
loader.conf. Never remove this; it will break your system. (Why is it a module then? Due to technical limitations that we need to solve.)
The userspace parts are provided by headers in
libmach, and extensions to
migcompiler is provided to compile
.deffiles into Mach IPC/RPC code.
launchdis now the system
initprocess (pid 1). It starts a few essential services (
auditd) as LaunchDaemons then passes control to the standard
rcscripts to start the rest of the system. More services can be translated into LaunchDaemons over time. (
auditdare temporarily disabled for stability concerns.)
-+= 00001 root /sbin/launchd |--= 00025 root /sbin/devd -d |--= 00026 root /usr/sbin/asld -d |--= 00027 root /usr/sbin/auditd -l |--= 00030 root /usr/sbin/notifyd -d
LaunchDaemons are started from their descriptions in
/Library/LaunchDaemonsas on macOS, but ours are currently defined in JSON instead of XML. (Because that's how iX Systems did their
launchctl.) Adding XML plist support here is on the task list.
launchdinstance is started to manage user LaunchAgents (defined in
~/Library/LaunchAgents) and LaunchDaemons (defined in
launchdand Mach are still somewhat unstable. You can boot using
set init_path="/sbin/init"followed by
bootfrom the boot loader prompt to use the regular init with minimal loss of functionality. (You will need to start Filer and Dock from a command line if you do this.)
Grand Central Dispatch
You can now write (or build) software that needs Grand Central Dispatch, also known as libdispatch or Dispatch. Dispatch provides thread pools and concurrency. It can be used directly, but more importantly, opens the door to adding Dispatch support in Foundation. Note that neither Cocoa or CoreFoundation have been extended yet to support Dispatch.
libxpchas also been added, courtesy of work done by iX Systems. XPC is "a lightweight mechanism for basic interprocess communication" built on top of Mach. XPC is used by
launchdamong other things and enables the addition of more compatibility stuff in Foundation. Note that Cocoa and CoreFoundation have not been extended yet to support XPC.
Clang and LLVM
LLVM and Clang have been upgraded to 13.0.0.
Airyx clang version 13.0.0 ([email protected]:llvm/llvm-project.git llvmorg-13.0.0-0-gd7b669b3a303) Target: x86_64-airyx-freebsd13.0 Thread model: posix InstalledDir: /usr/bin
Clang now links
libobjcautomatically for any input files detected as Objective-C (
*.m) or Objective-C++ (
*.mm). This only works if compilation and linking are one step. If linking is a separate step, you still need to specify
Clang now defines the preprocessor symbol
__MACH__in addition to
__AIRYX__. You may notice that software tries to build in its Mac configuration due to this.
Several essential header files from Darwin and Apple opensource have been added to
LaunchServices now uses the "canonical" path of
/var/db/launchd/com.apple.launchd.per-user.$UIDfor its database. If you had an existing database under
$HOME/Library/db, you can move it to the new location to preserve your app associations. It has also been integrated with
launchdand will launch applications via the per-user instance if it is available. All programs launched from the Dock, Filer or
opencommands use LaunchServices and will be
"MachO ELF" Hybrid Linker, or "How I spent my winter vacation"
A proof-of-concept hybrid runtime linker has been added as
/usr/lib/dyld. This is not Apple's
dyld- it's an attempt to resolve symbols from a MachO binary with exports from ELF shared objects. The goal here is to run Mac MachO executables against our ELF-based Frameworks and other libraries so we don't need two sets of them or to convert everything to MachO. Curious people can read these notes captured during its very early development.
So far, a small "hello world" in C using
printf()and one in Objective-C using Foundation's
NSLog()have been compiled on macOS and run under airyxOS's
dyld. GUI apps will not run yet.
You need to create symlinks as well that translate the library & framework names in the executable to those on airyxOS; e.g.
ln -s /lib/libc.so.7 /usr/lib/libSystem.B.dylib.
MachO Executable Support
dyldis a very simple MachO image activator (BSD kernel module) that can recognize a MachO executable and transparently start it under
dyld. This lets you run MachO binaries the same way as native ELF ones. Load the
kldloadto try it.
★ [email protected] ~ᐳ file ~/hello2 /Users/zoe/hello2: Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE> ★ [email protected] ~ᐳ ~/hello2 2022-01-17 23:24:34.531 hello2[50578:80187d000] Hello from MachO Foundation!
A Whole New World .. er GUI
Our previous images used a pretty traditional X11/KDE desktop environment that was shoehorned into looking and behaving like the Mac desktop. However, this can only go so far due to the very different architecture and design of the two systems. 0.4.0pre2 has the very first bits of a new UI built ground-up to be what we need. It's based on the wayland protocol, wlroots, OpenGL ES2, EGL, and kernel mode setting (KMS) drivers using the direct rendering manager (DRM).
WindowServer can be started if you have an Intel, AMD embedded, or Radeon GPU. It will not work in virtual machines until we get KMS drivers for the virtual hardware. Briefly:
kldload i915kms # for Intel GPUs /System/Library/CoreServices/WindowServer.app/WindowServer
If this works, you'll see a wallpaper and a placeholder menu bar with clock.
- The Live CD was reworked to use
tmpfsfor writable areas and dropped
- Several new tree-themed wallpapers were added.
posix_spawn()now supports the
POSIX_SPAWN_SETEXECflag from Darwin.
/privatenow exists with symlinks to some critical areas
- The installer now supports installing to MMC and VirtIO (VBD) media.
- pthread work queues were added to support libdispatch and friends
- Some icons have been updated (and more are coming)
Limitations and Known Issues
There are still many major limitations and problems making this release unsuitable for daily use.
- There is no GUI to easily configure WiFi device (or much of anything else)
- Lots of inconsistencies and incompatibilities
- Very few apps available
- Mach is not completely stable
- If the system does not shut down cleanly, you may see a kernel panic & reboot on the next start. It should start correctly after this reboot.
- Installer has not been updated yet and will very likely do the wrong things
- Launchd jobs created from LaunchServices are not removed after exiting
openoptions (e.g. redirecting I/O, setting env vars, wait for exit) are not yet implemented on the
launchdversion of LaunchServices
Please see the wiki for system requirements, install instructions and where to find things.
A huge thanks to the NetBSD and NextBSD projects for pioneering Mach support in BSD. Additional huge thanks to Jordan Hubbard, Kip Macy, the entire NextBSD team, and iX Systems for all their work on XPC, launchd, and Dispatch! As usual, thank you to our community of sponsors, designers, developers, testers, and users for supporting the project.
- The Live CD was reworked to use
airyxOS Tanuki v0.3.0
airyxOS 0.3.0 (Tanuki) BETA Release
This is the first beta release of airyxOS! Many things are still missing and there are many rough edges, but it is mostly stable and illustrates the project direction. Highlights of release 0.3.0 are:
- Default application bundles: Firefox, Terminal, and Kate
- A new AppKit-based ObjectiveC installer (Install airyxOS.app)
- Java SDK 17.0.1+12
- Updated to FreeBSD 12.3RC base OS and kernel
- Improvements to AppKit including better support of color catalogs and color lists, more Mac-like default colors, support for pop-up menus, fixed scrollbar icons, improved font handling, system key bindings, improved NIB support, fixed glitches in window resizing and moving, and more.
- Updated many packages
There are still several major limitations that make it less than ideal.
- There is no Dock
- There is no GUI to easily configure WiFi devices
- Contention between Filer and Plasmashell can cause a black screen
- Lots of inconsistencies and incompatibilities
- Very few apps available
Please see wiki.airyx.org for system requirements, install instructions and where to find things.
Ask questions or give feedback in the Discussions area. Please report any bugs to the Issues tracker. Thanks!
Download zipped ISO below, or download the torrent file from FOSSTorrents.
OpenJDK 17.0.1+12 (2021-10-30) built for airyxOS and usable as a bootstrap JDK for further builds.
This is a vanilla FreeBSD JDK other than being packaged for airyxOS. It does not have any menu, font, or other system integration yet.
Airyx 0.3.0pre3 (Tanuki) ALPHA Preview Release
This is an early Developer Preview release. It is incomplete and alpha quality, but will give you an idea where airyxOS is headed.
Tanuki is the next iteration of Airyx, replacing the Atomic PoC series. The full release notes are available at https://airyx.org/releases/
Updated 2021-10-16 to 0.3.0pre3
0.3.0pre has been run on VMware Fusion, Proxmox 7, VirtualBox, an old Dell Inspiron laptop, and a few other machines with varying degrees of success.
Airyx 0.2.2 (Atomic) Preview Release
This is a Developer Preview release.
0.2.2 is the first build of Airyx based on the helloSystem components and FuryBSD LiveCD installer. It can be run or installed from the ISO and should have better hardware support, in addition to the slick helloSystem desktop and applications. It switches back to using pre-built FreeBSD packages for most things in the interest of compatibility and speeding up development (although I hate that things are shipped in /usr/local!)
If you find the swapped Ctrl and Option (Alt) keys annoying, you can change it from the System menu -> Applications (Preferences) -> Keyboard.
Changes from v0.2.1:
- DBusKit (work in progress)
- partial support for global menus in NSApplication via DBusKit
- project renamed