How difficult is it to port the GNU/Hurd system to run on another architecture?

The GNU/Hurd system consists of Hurd servers running as user-space processes on top of the GNU Mach microkernel. The system functionality is usually accessed through the POSIX interface that is provided by glibc and libpthread.

A whole-system port involves touching all these components, with varying degree, of course. In 2024, Sergey Bugaev completed an experimental system port to AArch64, so be sure to consult him, if you are considering a system port.

For a CPU architecture port, the microkernel is the most involved part, followed by glibc and the threading library.

The original Mach microkernel was portable to a number of architectures which were a lot more popular at the beginning of the 1990s than they are now.

The Debian GNU/Hurd system is currently available for the x86 and X86_64 architectures and it is probably the most up-to-date with about 70% of Debian's packages available. There also exists an experimental GNU/Hurd AArch64 port. Contact Sergey if you are interested in running the Hurd on AArch64. You can also run the Hurd with emulators such as QEMU (or KVM), or VirtualBox. Besides this, there is a port for the Xen domU sub-architecture. With Xen, you can run the Hurd and GNU/Linux in parallel. If you are already running Guix System, then childhurds are probably the easiest way to try out the Hurd.

Further on, there are some unfinished porting attempts for the Alpha, MIPS and PowerPC architectures. These have not been completed due to little developer interest.

Another option is to do the port at a different layer: port the Hurd servers to not run on the GNU Mach microkernel, but instead on top of another microkernel. Or, even by providing a Mach emulation layer on top of a monolithic kernel. For example, there could be a port for having Mach run as a POSIX user-space process, or by implementing the Mach IPC facility (as well as several others) as Linux kernel modules. While there have been some experiments, no such port has been completed yet.

IRC, freenode, #hurd, 2013-09-05

<rah> what would be required to port the hurd to sparc?
<pinotree> port gnumach, write the sparc bits of mach/hurd in glibc, and
  maybe some small parts in hurd itself too
<rah> what would be required to port gnumach? :-)
<braunr> a new arch/ directory
<braunr> bootstrap code
<braunr> pmap (mmu handling) code
<braunr> trap handling
<braunr> basic device support (timers for example)
<braunr> besides, sparc is a weird beast
<braunr> so expect to need to work around tricky issues
<braunr> in addition, sparc is dead
<rah> mmm
<rah> it's not totally dead
<rah> the T1 chips and their decendents are still in production
<rah> the thing is I'd like to have real hardware for the hurd
<rah> and if I'm going to have two machines running at once, I'd rather one
  of them was my UltraSPARC box :-)
<braunr> rah: unless you work hard on it, it's unlikely you'll get it
<rah> braunr: of course