You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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.)
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 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.
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!
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.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
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.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 byloader.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 tolibc
.The
mig
compiler is provided to compile.def
files into Mach IPC/RPC code.launchd
and LaunchAgentsApple's
launchd
is now the systeminit
process (pid 1). It starts a few essential services (asld
- syslog,notifyd
,devd
andauditd
) as LaunchDaemons then passes control to the standardrc
scripts to start the rest of the system. More services can be translated into LaunchDaemons over time. (asld
andauditd
are temporarily disabled for stability concerns.)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 theirlaunchctl
.) 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 bylaunchd
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.
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 withlaunchd
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'sdyld
- 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'sNSLog()
have been compiled on macOS and run under ravynOS'sdyld
. 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 underdyld
. This lets you run MachO binaries the same way as native ELF ones. Load themacho.ko
module withkldload
to try it.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:
If this works, you'll see a wallpaper and a placeholder menu bar with clock.
Other Changes
tmpfs
for writable areas and droppedunionfs
posix_spawn()
now supports thePOSIX_SPAWN_SETEXEC
flag from Darwin./private
now exists with symlinks to some critical areasLimitations and Known Issues
There are still many major limitations and problems making this release unsuitable for daily use.
open
options (e.g. redirecting I/O, setting env vars, wait for exit) are not yet implemented on thelaunchd
version of LaunchServicesPlease 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.
This discussion was created from the release ravynOS 0.4.0pre3.
Beta Was this translation helpful? Give feedback.
All reactions