Airyx Versions Save

A BSD-based OS project that aims to provide source and binary compatibility with macOS® and a similar user experience.

v0.4.0pre4

1 year ago

ravynOS Pygmy Marmoset

Developer Preview Release v0.4.0pre4

Welcome to the 0.4.0pre4 Developer Preview of ravynOS as we continue working towards release 0.4! As usual, this is an unstable pre-release of upcoming stuff intended for people helping build the system. It is not complete. It contains bugs - sometimes serious ones - including application and desktop crashes and kernel panics. You have been warned.

This snapshot release includes the start of a GUI based on Cocoa and Mach. It aims to be Mac compatible. The GUI is very rudimentary so far - please be patient! More is on the way.

Detailed release notes below! TLDR: This release does stuff. More stuff than the previous one, but not by much, and a lot less than we want it to do eventually.

Kernel stabilization

A major bug in mach_msg memory allocation was fixed, massively improving the kernel's stability. There may still be occasional freezes or panics, mainly in the drm-kmod (DRM/KMS video) drivers or in the latest Intel wifi (iwlwifi) driver.

More LaunchDaemons

Launchd now starts the Apple syslog (asld) and auditd services which had been previously disabled for stability issues. The command-line aslutil can be used to examine ASL logs.

WindowServer & SystemUIServer

The Tanuki series releases 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.0pre3 had the very first bits of a new UI built ground-up to be what we need. This release adds some vital plumbing and the first version of SystemUIServer.

WindowServer should start automatically if it detects a supported GPU (Intel HD and Iris, AMD or Radeon - we are still working towards virtual machine support with qxl and vmwgfx drivers). If successful, a black and white "ravynOS" wallpaper should appear on all screens and a login window should appear on one of them. Enter "liveuser" as the user name, leave password blank, and click the Login button. If you get it wrong, there is no feedback: just try again. A better login window is in development but we needed something quickly to make the Live ISO work :)

After login, the display should change to a black screen with a menu bar at the top of one screen. The menu bar has a clock and the Ravyn menu, with typical options like About this computer, Recent items, Sleep and Restart. Most of these work - try Sleep, Restart, and Shut Down in particular and please report if they work for your hardware.

When a Cocoa app (e.g. /Applications/Utilities/Install ravynOS.app) is launched, its menus appear in the global bar and can be used as you would expect. Switching applications will switch the active menus as well. Exiting an application removes its menus from the bar. Remaining work items are tracked here. Also beware of known issues #288 and #280 in particular.

Temporary Secret Terminal

Since the desktop has no way yet to launch apps, you can press <Logo>-<Enter> (Logo being your Windows or Command key or its equivalent) to launch a terminal window. Press <Alt>-<Space> while focused for a window menu, then enable Decorations to allow moving or resizing the window. The shell will be running as nobody, so use su - liveuser to get to your regular account. This is not a Cocoa app and has no menus; it will go away once we have something better.

Other Changes

  • Many commits from FreeBSD upstream
  • Many bugs fixed
  • Many new bugs

Limitations and Known Issues

  • The GUI is extremely minimal
  • Lots of inconsistencies and incompatibilities
  • Very few apps available
  • Launchd jobs created from LaunchServices are not removed after exiting
  • Many open options (e.g. redirecting I/O, setting env vars, wait for exit) are not yet implemented on the launchd version of LaunchServices
  • See open issues

Please see the wiki 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. Your help in fixing said bugs would be appreciated too! Thanks!

Get It!

Download 0.4.0pre4 from NomadLogic - US West or your closest mirror: US Central | US East | US East 2 | Norway | Denmark

Torrents are also available courtesy of FOSSTorrents

Unstable "nightly" builds are also available for developer testing: Download from US West | US Central | US East | US East 2 | Norway | Denmark

Torrents of the snapshot builds are available too! Thanks to @RangerRick for setting these up.

Acknowledgements

As usual, thank you to our community of sponsors, designers, developers, testers, and users, and mirror hosts for supporting the project.

v0.4.0pre3

1 year ago

ravynOS Pygmy Marmoset

Developer Preview Release v0.4.0pre3

Welcome to the 0.4.0pre3 Developer Preview of ravynOS (formerly airyxOS)! As usual, this is an unstable pre-release of upcoming stuff intended for people helping build the system. It is not complete. It contains bugs - sometimes serious ones. It might spontaneously panic & reboot, melt your computer, eat your cat, or accelerate the heat death of the universe. 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 liveuser with no password.

Detailed release notes below! TLDR: This release does stuff. More stuff than the previous one, but not by much, and a lot less than we want it to do eventually.

Rebranding

The project's name, brand, associated images and assets have been changed.

FreeBSD 14-CURRENT

The kernel and base system has been rebased onto the CURRENT (14.0) branch of FreeBSD. The extra packages built from ports remain on the 2022Q1 branch for now. We expect the move to CURRENT to improve hardware support, especially in the DRM/KMS video drivers. Please expect some instability as we work out the bugs from this major update.

Mach Subsystem

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 /usr/include/mach and /usr/include/sys/mach, libmach, and extensions to libc.

The mig compiler is provided to compile .def files into Mach IPC/RPC code.

launchd and LaunchAgents

Apple's launchd is now the system init process (pid 1). It starts a few essential services (asld - syslog, notifyd, devd and auditd) as LaunchDaemons then passes control to the standard rc scripts to start the rest of the system. More services can be translated into LaunchDaemons over time. (asld and auditd are 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 /System/Library/LaunchDaemons or /Library/LaunchDaemons as 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.

A per-user launchd instance is started to manage user LaunchAgents (defined in ~/Library/LaunchAgents) and LaunchDaemons (defined in ~/Library/LaunchDaemons).

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.

XPC

A libxpc has 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 launchd among 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.

ravynOS clang version 13.0.0 ([email protected]:llvm/llvm-project.git llvmorg-13.0.0-0-gd7b669b3a303)
Target: x86_64-ravynos-freebsd14.0
Thread model: posix
InstalledDir: /usr/bin

Clang now links libobjc automatically 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 -lobjc.

Clang now defines the preprocessor symbol __MACH__. The symbol __AIRYX__ is no longer defined by the compiler; instead it defines __RAVYNOS__. You may notice that software tries to build in its Mac configuration due to the presence of __MACH__.

Several essential header files from Darwin and Apple opensource have been added to /usr/include.

LaunchServices

LaunchServices now uses the "canonical" path of /var/db/launchd/com.apple.launchd.per-user.$UID for 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 launchd and will launch applications via the per-user instance if it is available.

"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 was 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 ravynOS'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 ravynOS; e.g. ln -s /lib/libc.so.7 /usr/lib/libSystem.B.dylib.

(Due to the complexity of this translation, we will very likely be moving toward building a Mach-O based system.)

MachO Executable Support

Alongside our dyld is 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 macho.ko module with kldload to try it.

★ zoe@haru ~ᐳ file ~/hello2
/Users/zoe/hello2: Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE>
★ zoe@haru ~ᐳ ~/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.0pre3 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 - work is underway to support Vmware (vmwgfx) and virtio (qemu, bhyve, others). 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.

Other Changes

  • The Live CD was reworked to use tmpfs for writable areas and dropped unionfs
  • Several new tree-themed wallpapers were added.
  • posix_spawn() now supports the POSIX_SPAWN_SETEXEC flag from Darwin.
  • /private now 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
  • 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.
  • Launchd jobs created from LaunchServices are not removed after exiting
  • Many open options (e.g. redirecting I/O, setting env vars, wait for exit) are not yet implemented on the launchd version of LaunchServices

Please see the wiki 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. Your help in fixing said bugs would be appreciated too! Thanks!

Get It!

Download 0.4.0pre3 from NomadLogic - US West or your closest mirror: US Central | US East | US East 2 | Norway | Denmark

Unstable "nightly" builds are also available for developer testing: Download from US West | US Central | US East | US East 2 | Norway | Denmark

Acknowledgements

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, and mirror hosts for supporting the project.

v0.4.0pre1

2 years ago

airyxOS Pygmy Marmoset

Developer Preview Release v0.4.0pre1

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.

FreeBSD stable/13

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.

Mach Subsystem

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 /usr/include/mach and /usr/include/sys/mach, libmach, and extensions to libc.

The mig compiler is provided to compile .def files into Mach IPC/RPC code.

Dock

A first look at the long-awaited Dock is here! Dock is being written from scratch using a hybrid of Qt and Cocoa in Objective-C++ and modeled after a recent macOS 11.x Dock. It is functional but still quite limited. There is no launch feedback or "needs attention" notification yet.

Applications can be added/removed by editing the preference plist ~/Library/Preferences/org.airyx.Dock.plist. The format is below. Be careful! Future versions will support drag & drop and a preference pane.

natsu% cat ~/Library/Preferences/org.airyx.Dock.plist 
{
 CurrentItems = (
   /Applications/Kate.app,
   /Applications/Firefox.app,
   /Applications/Utilities/Terminal.app
 );
 CurrentSize = "{320, 64}";
 FilerDefaultFolder = "~";
 Location = 0;
}

Clicking the Filer icon when it has no open windows will open the FilerDefaultFolder, which defaults to your home directory. Clicking the Downloads folder will open ~/Downloads in Filer. Trash is not functional yet. There is also a serious memory leak when launching apps currently being investigated.

launchd and LaunchAgents

Apple's launchd is now the system init process (pid 1). It starts a few essential services (asld - syslog, notifyd, devd and auditd) as LaunchDaemons then passes control to the standard rc scripts to start the rest of the system. More services can be translated into LaunchDaemons over time. (asld and auditd are 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 /System/Library/LaunchDaemons or /Library/LaunchDaemons as 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.

A per-user launchd instance is started to manage user LaunchAgents (defined in ~/Library/LaunchAgents) and LaunchDaemons (defined in ~/Library/LaunchDaemons).

 |-+= 01144 zoe /sbin/launchd
 | |--= 01149 zoe /System/Library/CoreServices/Filer.app/Contents/Airyx/Filer --desktop
 | |-+= 01159 zoe /Applications/Utilities/Terminal.app/Contents/Airyx/Terminal (qtermina
 | | \-+= 01161 zoe /usr/bin/zsh
 | |   \-+= 10911 zoe pstree
 | |     \--- 10912 zoe ps -axwwo user,pid,ppid,pgid,command
 | |--= 10798 zoe /System/Library/CoreServices/Dock.app/Contents/Airyx/Dock
 | \-+= 10810 zoe /Applications/Firefox.app/Contents/Airyx/Firefox (firefox)

Currently, the File Manager (Filer) and Dock processes are per-user LaunchAgents and can be managed with launchctl. e.g.

$ launchctl stop org.airyx.Dock
$ launchctl start org.airyx.Dock

(Note that you can't actually stop the Dock with the commands above as it will always restart immediately. Use launchctl remove org.airyx.Dock to actually stop it by removing the job.)

NOTE: launchd and Mach are still somewhat unstable. You can boot using set init_path="/sbin/init" followed by boot from 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.

XPC

A libxpc has 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 launchd among 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 libobjc automatically 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 -lobjc.

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 /usr/include.

LaunchServices

LaunchServices now uses the "canonical" path of /var/db/launchd/com.apple.launchd.per-user.$UID for 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 launchd and will launch applications via the per-user instance if it is available. All programs launched from the Dock, Filer or open commands use LaunchServices and will be launchd jobs.

"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

Alongside our dyld is 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 macho.ko module with kldload to try it.

★ zoe@haru ~ᐳ file ~/hello2
/Users/zoe/hello2: Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE>
★ zoe@haru ~ᐳ ~/hello2     
2022-01-17 23:24:34.531 hello2[50578:80187d000] Hello from MachO Foundation!

Other Changes

  • Firefox was updated to v97.0
  • The Live CD was reworked to use tmpfs for writable areas and dropped unionfs
  • Several new tree-themed wallpapers were added.
  • posix_spawn() now supports the POSIX_SPAWN_SETEXEC flag from Darwin.
  • /private now 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)
  • Contention between Filer and Plasmashell can cause a black wallpaper and missing menus
  • 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
  • Quitting Firefox leaves it in "running" state on the Dock, preventing further launches until Dock is restarted
  • Launchd jobs created from LaunchServices (Dock, Filer, open) are not removed after exiting
  • Many open options (e.g. redirecting I/O, setting env vars, wait for exit) are not yet implemented on the launchd version of LaunchServices
  • The live image may not start the desktop in Vmware. Workaround: switch to Alt+F4 console, sudo rm /etc/X11/xorg.conf then sudo /etc/rc.d/slim restart.

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. Your help in fixing said bugs would be appreciated too! Thanks!

Get It!

Unstable "nightly" builds are available for developer testing Download from MEGA

Acknowledgements

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.

v0.4.0pre2

2 years ago

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 liveuser with no password.

FreeBSD stable/13

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.

Mach Subsystem

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 /usr/include/mach and /usr/include/sys/mach, libmach, and extensions to libc.

The mig compiler is provided to compile .def files into Mach IPC/RPC code.

launchd and LaunchAgents

Apple's launchd is now the system init process (pid 1). It starts a few essential services (asld - syslog, notifyd, devd and auditd) as LaunchDaemons then passes control to the standard rc scripts to start the rest of the system. More services can be translated into LaunchDaemons over time. (asld and auditd are 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 /System/Library/LaunchDaemons or /Library/LaunchDaemons as 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.

A per-user launchd instance is started to manage user LaunchAgents (defined in ~/Library/LaunchAgents) and LaunchDaemons (defined in ~/Library/LaunchDaemons).

NOTE: launchd and Mach are still somewhat unstable. You can boot using set init_path="/sbin/init" followed by boot from 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.

XPC

A libxpc has 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 launchd among 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 libobjc automatically 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 -lobjc.

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 /usr/include.

LaunchServices

LaunchServices now uses the "canonical" path of /var/db/launchd/com.apple.launchd.per-user.$UID for 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 launchd and will launch applications via the per-user instance if it is available. All programs launched from the Dock, Filer or open commands use LaunchServices and will be launchd jobs.

"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

Alongside our dyld is 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 macho.ko module with kldload to try it.

★ zoe@haru ~ᐳ file ~/hello2
/Users/zoe/hello2: Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE>
★ zoe@haru ~ᐳ ~/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.

Other Changes

  • The Live CD was reworked to use tmpfs for writable areas and dropped unionfs
  • Several new tree-themed wallpapers were added.
  • posix_spawn() now supports the POSIX_SPAWN_SETEXEC flag from Darwin.
  • /private now 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
  • Many open options (e.g. redirecting I/O, setting env vars, wait for exit) are not yet implemented on the launchd version of LaunchServices

Please see the wiki 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. Your help in fixing said bugs would be appreciated too! Thanks!

Get It!

Unstable "nightly" builds are available for developer testing: Download from US West | US Central | US East | US East 2 | Norway | Denmark

Acknowledgements

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.

airyx-0.3.0

2 years ago

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.

jdk-17.0.1

2 years ago

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.

jdk17-bootstrap

2 years ago

OpenJDK 17.0 2021-09-14 built for airyxOS and usable as a bootstrap JDK for further builds.

0.3.0pre

2 years ago

This is an early Developer Preview release. It is incomplete and alpha quality, but will give you an idea where Airyx is headed.

Tanuki is the next iteration of Airyx, replacing the Atomic PoC series. Major changes include:

  • A faster LiveCD boot that uses unionfs and does not require a ramdisk
  • A new Airyx package repo which gets everything out of /usr/local. Over 900 packages have been built with consistent paths like /System/Library/Fonts, /usr/lib and /etc.
  • A LaunchServices framework
  • Updated Filer integrated with LaunchServices and built as /System/Library/CoreServices/Filer.app. It has also been enhanced to properly extract icons and display names from .app bundles and AppDirs.
  • A new desktop environment based on KWin and parts of KDE Plasma (work in progress) with a modern Mac-like aesthetic.
  • A "system" menu i.e. the persistent icon at the left of the global menu which provides services like "About" and "System preferences"
  • Many bugs fixed.
  • Many new bugs :)

Updated 2021-09-03 to 0.3.0pre2 with the following bugs fixed (hopefully):

  • #102 Partial fix for the "black screen of contention" (much improved since 0.3.0pre1)
  • #93 No menu showing when desktop is selected (now shows Filer menu as expected)
  • #103 Version numbering fixed

plus a new wallpaper and a mostly complete and working Tree menu.

Please read the full release notes of 0.3.0pre which can be found at airyx.org. 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.

Ask questions or give feedback in the Discussions area. Please report any bugs to the Issues tracker. Thanks!

0.3.0pre3

2 years ago

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.

Ask questions or give feedback in the Discussions area. Please report any bugs to the Issues tracker. Thanks!

v0.2.2

2 years ago

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

Known issues:

  • #47
  • #50