|
Posted
about 1 month
ago
Hello and welcome to another Qoth! Here's what's been happening in Q2
of 2026!
Joshua Branson added a pretty cool svg logo for our ethernet
multiplexor. He built that image
with Inkscape whilst using a Hurd laptop (Thinkpad 420) running on
real
... [More]
iron! The Hurd wiki could certainly use more artwork. Perhaps
you have a favorite Hurd translator that you believes needs some
artwork!
Sergey Bugaev announced his WIP
9pfs
(source code),
and it has a wiki page! He writes:
Some years ago, I experimented with implementing a 9P translator for
the Hurd. Hopefully there is no need to tell this list what 9P is :)
Besides just browsing files on the few existing servers out there, a
potential use case is virtio-9p, to enable shared directory trees
between VMs and the host. But that would need someone to implement
virtio support in the Hurd.
I wanted to complete 9pfs before publishing, but that ultimately
didn't happen, so now it's time to turn it over to the community. I
now went and made the repository public on GitHub:
https://github.com/bugaevc/9pfs
What's implemented is basic browsing (readdir, stat), path resolution
(dir_lookup), and reading files (io_read). And below that, the whole
tracking for nodes, peropens, protids, fids, tags, and 9p RPCs.
Improvements are welcome, send patches to this list with [PATCH 9pfs]
in the subject. A good starting point would be to continue porting
things that I had implemented in the old netfs-based version (see
netfs.c) but didn't yet port to the new one.
He then got a little more motivated, and he added some write support!
Etienne Brateau added
validation
to msync, so
that the Hurd better follows POSIX.
Diego Nieto Cid worked on allowing privileged users to set their task
priority (nice value). His patches landed in
glibc
and GNU
Mach.
He also fixed a tiny
bug
in our test suite. He fixed an adjtime bug, which is helpful to the
OpenNTPD
port,
and he fixed
two more
bugs.
Paulo Duarte sent a RFC patch series trying to commit Sergey’s
previous AArch64 work. He writes:
This series adds the gnumach kernel-side implementation for the
aarch64 ABI Sergey landed in April 2024, plus the test-suite arms.
Patch 01 brings in the aarch64-only sources from bugaevc/wip-aarch64
verbatim, with Sergey as Author; the rest is mine.
The meaningful divergence from wip-aarch64 is what I left out:
roughly 150 files of cross-arch refactoring across kern/, ipc/, vm/,
device/intr.{c,h}, and the i386 tree. Each got replaced with a
smaller per-arch shim under aarch64/ so kern/bootstrap.c,
device/intr.{c,h}, kern/lock.h, and the i386 trees all stay
bit-identical to current master. The shared-file footprint outside
aarch64/ is four files: a new ELF constant, two missing decls plus
their include, and a linker-symbol filter extension...
Tested: 12/12 pass on x86_64, i686, and aarch64 under qemu. No
bare-metal validation yet. I plan to build bootable images and boot
the kernel on Apple M1 / Raspberry Pi (aarch64) and an x86_64 box
(x86_64 + i686). Help on any of these welcome.
He also fixed a tiny cross compilation issue.
gfleury fixed some tmpfs
typos.
He also fixed a kernel crash on a null pointer
deference.
Almudena Garcia is developing a WIP trivfs implementation in
rust. The work is
not complete yet, but it is possible to write Hurd translators in Rust!
Mikhail Karpov added some checks for mmap in several places.
He also worked on adding storeio to the bootstrap
chain.
This is actually quite interesting. Currently the Hurd sets device
entries in /dev/ statically. For example, I am writing this qoth on
a Hurd machine that is using two /dev/ entries for my filesystem:
/dev/wd0s1 for swap and /dev/wd0s5 for my root filesystem.
However, /dev/wd0s1 through /dev/wd0s16 exist on my computer!
Once Mikhail's project is done, then the Hurd will dynamically
populate SATA devices at boot time! No more need for static
translators! He
writes:
I've expanded the functionality of the partfs translator to work
with multiple disks and their partitions. Thus, by running the
command:
settrans -c partfs /hurd/partfs /root/disk1.img /root/disk2.img /root/disk3.img
The translator directory will have the following directory tree:
partfs
├── 0
│ ├── 1
│ ├── 2
│ └── ...
├── 1
│ ├── 1
│ ├── 2
│ └── ...
├── 2
│ ├── 1
│ ├── 2
│ └── ...
Since the disks are directories, the cd and ls commands work in the translator node.
I also tested mounting, reading, and writing using the commands:
`settrans -c ext01 /hurd/ext2fs -w -T typed file:/root/partfs/0/1`
and
`settrans -c ext1_1 /hurd/ext2fs -w -T typed part:1:file:/root/partfs/1`
It actually is even cooler! Samuel (our fearless leader) is seeking
feedback
for how to name these newer /dev entries. Samuel writes:
One thing that would be really needed for efficiency is to implement
netfs_file_get_storage_info, so that libstore would be able to get the
underlying storage information, and directly get data from there rather
than partfs having to pass data with io_read/write.
I'm then wondering how this would fit in the "grand scheme". Our current
approach, /dev/hd0s* being always there, is indeed not really good
because it doesn't easily tell the user which partitions are actually
there. We used to have to have this because partitions used to be
handled by the kernel, and then we have moved to
storerio+parted-supported partitions, which brings much more
flexibility.
Perhaps we could use
settrans -c /dev/hd0s /hurd/partfs /dev/hd0
and then we'd have /dev/hd0s/1, which is almost like before, but allows
the entries to be dynamic. Actually, we could even have some
settrans -c /dev/hd /hurd/probedisk hd
and then we'd have /dev/hd/0, and we could have /dev/hd/0s being partfs,
so we'd eventually have
/dev/hd/0s/1
But I'm also thinking that perhaps it could be integrated more with
storeio, i.e. /dev/hd0 can as well also act as a directory with partfs
behavior, so you could have
/dev/hd0/1
and with the probedisk translator, you could have
/dev/hd/0/1
What do people think about it?
Mike Kelly has been hard at work porting OpenBSD’s
OpenNTPD,
which required some glibc work. The Hurd doesn't currently have a
NTP daemon, so thanks Mike!
He also debugged a weird memory error with
rump,
and he provided a "brown-tape"
solution
for it. Hopefully, he (or you dear reader), can reach out to the
NetBSD people to fix this bug. This just goes to show that when two
projects use the same code, both projects benefit!
He also got a glibc patch
committed.
Essentially SIGSTOP/SIGCONT was duplicating portions of files,
which is now fixed. However, there are still some other
issues
with building some haskell packages.
Joan Lledó continued his work
on
porting
dhcpcd.
Also Roy Maples, the dhcpcd maintainer did a lot of helpful work to
help us out. Thanks Roy!
Bradley Morgan fixed a tiny implementation bug with
cat. He
also tweaked procfs to show hidden
files,
and he allowed passing “-s” to
init.
Previously, passing "-s" to init was silently ignored.
Johannes Schauer Marin Rodrigues has been working on getting s-build
to run on amd64
Hurd. It
is a rather long email thread, so grab some popcorn and dig in!
Milos Nikic ported
Neovim.
He also worked on
bug
fixes
to
libdiskfs,
and he fixed a deadlock bug in the “ext3/ext4” filesystem
journal.
In the last qoth we had talked about how the Milos was working on
adding an ext3/ext4 binary compatible journal. Samuel has committed
it! Samuel wrote:
There is a couple things that I fixed on the fly:
- We want to use pthread_cond_clockwait rather than
pthread_cond_timedwait, to be able to use CLOCK_MONOTONIC instead of
CLOCK_REALTIME, to avoid being hit by ntpdate and such.
- In diskfs_S_dir_rename, there was an addition of:
pthread_mutex_unlock (&fnp->lock);
which was clearly bogus: we were unlocking it again below.
There are a couple things that we'd want to fix now:
- when calling diskfs_file_update, don't we have to be inside a
transaction? Otherwise if we pass wait=1 and use a journal, we won't
be waiting AIUI? Notably, in diskfs_S_dir_rmdir we don't use a
transaction. And ideally we'd have an assertion that makes sure we
respect this.
- we should define some helper for this recurring pattern:
if ((docommit) && (diskfs_synchronous || diskfs_journal_needs_sync (txn)))
diskfs_journal_commit_transaction (txn);
else
diskfs_journal_stop_transaction (txn);
- journal_drain_deferred_blocks should document what it does, not just
its call conditions :), and more generally the functions that are
not already documented in a .h and not just a _locked variant of a
documented function.
Leonardo Lopes Pereira did some spring
cleaning
to remove some dead
code.
Samuel Thibault mentioned in an
email
that the Hurd can support nvmes with rump, but that the work was just
not done yet. Perhaps you, dear reader, would like to help us
accomplish this task?
The mysterious user yelini worked on porting the D language compiler.
Damien Zammit worked on tweaking the Hurd’s WIP
CI.
He also
fixed
several
bugs
to make it possible to run the Hurd’s test suite from GNU/Linux
running on an AArch64 computer. He also is working on integrating
qemu’s Hurd support into upstream qemu’s
CI,
so that the support does not bitrot.
Sophiel Zhou fixed a tiny pfinet permission checking
issue
and taught pfinet to not fail under memory pressure:
This series fixes two latent crash bugs in pfinet where mmap
return values go unchecked, may causing crash when memory is tight.
Both bugs follow the same pattern: mmap is called to grow a buffer,
but the returned pointer is dereferenced before (or without) checking
for MAP_FAILED. Under normal operation mmap rarely fails, so these
have gone unnoticed, but under address-space pressure pfinet would
crash.
[Less]
|
|
Posted
4 months
ago
Gentoo GNU/Hurd released!
Details.
“
The year is 2026 and Gentoo is perhaps ready for an advanced kernel:
the GNU Hurd.
[...]
Scripts to build a working image that can be booted in QEMU can be
found at https://codeberg.org/thesamesam/gentoo-hurd
... [More]
(will move that to Gentoo infra).
”
Read the announcement email.
The GNU Hurd is the GNU project's replacement for the Unix kernel. It is a
collection of servers that run on the Mach microkernel to implement file
systems, network protocols, file access control, and other features that are
implemented by the Unix kernel or similar kernels (such as Linux). More
detailed.
GNU Mach is the microkernel upon which a GNU Hurd system is based. It
provides an Inter Process Communication (IPC) mechanism that the Hurd uses to
define interfaces for implementing in a distributed multi-server fashion the
services a traditional operating system kernel provides. More
detailed.
[Less]
|
|
Posted
5 months
ago
Hello! Welcome to a new qoth. This qoth covers new and interesting GNU/Hurd
developments in Q1 of 2026!
Details.
Brent W. Baccala debugged some x86_64 SMP issues with a Claude AI
bot. The bot did not contribute any code. It just found some
... [More]
incorrect code that Damien then fixed. It did get some things
wrong,
but it was incredibly helpful pointing out several problems. You can
read its report
here.
Joshua Branson tweaked the hurd wiki. The most helpful addition is this
page,
which documents how to flash a working qemu hurd image directly to an
HDD or SSD. This is a really easy way to install the Hurd on real
hardware! Buy a supported machine from this page and
give it a shot! Consider this another reminder that the Hurd project
could use more documentation writers. It's an easy way to
contribute. As a fun fact, Joshua wrote this qoth on
the Hurd running on a T420 with 12 GB of RAM! Running Debian GNU/Hurd on
bare metal these days is largely fairly stable. Emacs, i3, netsurf,
and luakit all work just fine and most of the Debian package archive
compiles without issue on the Hurd.
Etienne Brateau fixed a compilation error.
He also provided a simple test program
that exposed a rather serious threading bug,
which Samuel promptly fixed.
This is a good reminder that writing simple C test programs that
successfully run on Linux, but fail on the Hurd can have a large
impact.
Gianluca Cannata worked on our httpfs translator.
Diego Nieto Cid added a daemon-wait option for console-client.
This can help users with slow machines avoid a broken Hurd console.
He also fixed a rumpdisk compilation issue.
Mike Kelley fixed a deadlock in SMP enabled GNU Mach kernels.
He also fixed a page fault in amd64 SMP kernels.
He fixed another deadlock in the alarm () function.
He fixed a panic when running large builds
without the mach-defpager. He also fixed some of our signal related code.
He worked with Samuel to investigate an odd bug.
Their detailed investigation uncovered and lead to a fix in the Hurd's ext2's xattr code.
Joan Lledó updated some patches for the dhcpcd port
as well as some patches for upstream liblwip.
He also tweaked our lwip translator.
He also added a glibc patch
for IP_PKTINFO.
Milos Nikic
added
some
various
fixes.
He also made
many
considerable
contributions
on
filesystem
related
things including adding ext2fs support for 64 bit time,
He also fixed a rumpdisk deadlock.
He also fixed a potential lock in GNU Mach.
He fixed some IPC issues in glibc.
He contributed some
tiny fixes
to speed up GNU Mach's IPC. His most exciting work is a JDB2 binary
compliant journal,
which is an ext3/ext4 compatible journal. The Hurd may soon be running on
ext3fs or ext4fs instead of ext2fs! He writes:
I have been working on creating a prototype for a journal inside
ext2fs which is fully Linux compatible (binary JBD2 compatible). This
enables standard Linux tools (e2fsck, tune2fs, debugfs, etc.) to work
seamlessly with Hurd partitions.
This means one can mount a Hurd image from Linux and fix any issues
with the drive using standard journaling tools if the need
arises. While this is currently a prototype with polish still
required, it is functional.
Key Features:
* Log Replay: The driver writes JBD2-compliant transactions. I have
verified that after a hard crash of the Hurd guest, a Linux host
running e2fsck correctly replays the journal and restores filesystem
metadata consistency.
* Continuous Operation: The driver handles ring-buffer wrap-around and
checkpoints correctly. I have tested it with sustained loads
(50,000+ transaction loops) without deadlocks or corruption.
* Crash Safety: I have verified via "sabotage tests" (modifying the
disk offline after a crash) that the journal accurately restores the
correct metadata state.
* Lightweight: The implementation consists of only a few new files and
~800 lines of code.
You can read the complete email here.
He then tweaked the code a few times and summed up the current status.
He writes:
This is it. I have applied numerous fixes, performance tweaks, and
cleanups. I am happy to report that this (the journal) now performs on
par with unjournaled ext2 on normal workloads, such as
configuring/compiling the Hurd, installing and reinstalling packages
via APT, and untarring large archives (like the Linux kernel). I have
also heavily tested it against artificial stress conditions (which I
am happy to share if there is interest), and it handles highly
concurrent loads beautifully without deadlocks or memory leaks.
Progressive checkpointing ensures the filesystem runs smoothly, and
the feature remains strictly opt-in (until a partition is tuned with
tune2fs -j, the journal is completely inactive).
The new API in libdiskfs is minimal but expressive enough to wrap all
filesystem operations in transactions and handle strict POSIX sync
barriers.
Manolo de Medici fixed a bug allowing unprivileged users to modify the system
time.
He also worked on partially opening up the processor set API to unprivileged processes.
Samuel Thibault gave an update on the GNU Hurd project.
His talk dived into rumpnet, rumpdisk,
smp, etc. It was quite an interesting talk.
Essentially the Hurd is becoming a fairly stable option for daily
computing. Check out our status page for more information.
He provided numerous fixes for packages that were failing to build,
like
xserver-xorg-input-keyboard.
He also reported on a rumpnet bug,
which highlighted an interesting feature of the Hurd's design. When
Hurd's new or experimental device drivers crash, it does not bring
down the system. One can just restart the driver. If a device driver
crashes in Linux or BSD land, you may be in trouble.
He also discovered why the Hurd's crash translator hanged when generating core files on amd64.
Thanks to a lot of code from Damien, Samuel was able to upload an
amd64 SMP kernel to Debian Hurd!
This kernel still restricts processes to cpu0, but with the
/sbin/smp utility, one can experimentally run applications on
multiple cores. Once we fix the various race conditions, we can run
more of the Hurd via SMP. Please be aware that testing programs via
/sbin/smp can lead to crashes.
He also worked on fixing xmm state restoration on signal.
Mesa was also ported to the Hurd. The patches are not quite merged upstream.
The Hurd does not have a DRM yet, so the performance
is quite poor. nexussfan on irc ported
ClassiCube.
It runs quite slowly. We are hoping to eventually add a proper DRM
to the Hurd. Please reach out if you'd like to help us achieve this.
Damien Zammit ported qemu to the Hurd.
He is currently using it for his continuous integration.
It uses a Hurd host to launch qemu to test GNU Mach. He made many
contributions to the Hurd's
CI
including testing the Hurd's xen support. He
fixed GNU Mach compilation on GCC 10.
He also contributed
a
lot
of
fixes
for
the Hurd's
x86_64
support.
Thanks to Damien's numerous contributions, the Hurd's SMP support is
becoming far more useful!
If you did not see the recent Guix Hurd news, then please check out
their most recent blog post! There are
currently two active GNU Hurd distributions: Debian GNU/Hurd and GNU
Guix Hurd. These two distributions run on real hardware! If you have
been closely reading the #hurd irc channel, then you may have heard
about some work on adding another Hurd distribution. Perhaps we will
have more to report on this exciting news in the next Qoth!
The GNU Hurd is the GNU project's replacement for the Unix kernel. It is a
collection of servers that run on the Mach microkernel to implement file
systems, network protocols, file access control, and other features that are
implemented by the Unix kernel or similar kernels (such as Linux). More
detailed.
GNU Mach is the microkernel upon which a GNU Hurd system is based. It
provides an Inter Process Communication (IPC) mechanism that the Hurd uses to
define interfaces for implementing in a distributed multi-server fashion the
services a traditional operating system kernel provides. More
detailed.
[Less]
|
|
Posted
7 months
ago
Hello! Welcome to a new qoth. This qoth covers new and interesting GNU/Hurd
developments in Q4 of 2025!
Details.
Joan Lledó worked on porting dhcpcd
to the hurd. He also made some changes so that
lwip would work with dhcpcd. In
this message he
... [More]
writes:
This is the current state of the port:
Support only for IPv4. IPv6 not supported yet.
It works only over lwip. First, because dhcpcd requires some definitions from
headers and pfinet doesn't provide them AFAIK, but lwip provide the headers
through the liblwip-dev package.
Second, because both pfinet and lwip need changes in the translator in order
to be fully compatible with dhcpcd, and I made the changes in lwip since I
know it better.
Only Ethernet is supported. This is because the Hurd doesn't define AF_LINK
so dhcpcd can't get any data from the interface other thant what is returned
by getifaddrs().
I'm manually providing the MAC address and hardcoding the interface type to
Ethernet in the if_init function. I assume this is correct because the Hurd
only supports ethernet interfaces AFAIK.
dhcpcd monitors the interfaces and gets notified when there are changes in
routes or network configurations. This is not working yet for the Hurd.
dhcpcd implements some privilege separation by which the process spawns new
processes that run as a non-privileged user. Or that's what I understood.
It's not implemented for the Hurd because I've deferred this for now.
Access to BPF is provided by libpcap.
libpcap and liblwip-dev are dependencies for the Hurd.
This has been tested only in a 32-bit Hurd.
Damien Zammit worked on fixing some
interrupt bugs
in the acpi server.
He also made some fixes for rumpnet.
He also worked on adding a
callwheel to GNU Mach's clock.
This would make GNU Mach faster in certain ways. He writes:
Timeouts are now very fast to look up, at the expense of more memory,
a much shorter list is traversed rather than all of them. See [1].
Timeouts that are stopped before expiry are now faster to remove,
and inserting a timeout is faster.
[1] https://doi.org/10.7936/K7VM49H5
Damien also made some progress on the
SMP support for x86_64. He writes:
This allows gnumach to be compiled with --enable-ncpus > 1 on x86_64.
However, there is still work to be done particularly with SWAPGS
instruction. Notably, this changeset modifies the AP low boot address
to be hardcoded to 0x11000 because it is very difficult to implement
64 bit AP bringup without knowing the offset in advance of waking up
the AP via SIPI.
TESTED:
i386 UP still boots
i386 SMP still works with -smp 1 (but freezes during rumpdisk probe)
i386 SMP still works with -smp 6 (but freezes during rumpdisk probe)
x86_64 UP still boots
x86_64 SMP now compiles, but freezes with -smp 1 during grub module load
x86_64 SMP now compiles, but freezes with -smp 6 just before AP bringup
We still have work to do, but this definitely makes progress.
We had a kind developer submit a tiny patch that kills
lingering zombie processes.
Diego Nieto Cid fixed several compiler warnings throughout our codebase:
lwip,
nfsd,
nfs, etc.
He also tidied up the glibc setrlimit () call that lets a process limit
its consumption of system resources. When Samuel committed this he
noticied
that it works well. Samuel wrote:
Thanks for this! That will stabilize boxes against programs that
allocate like crazy!
Yes, it works well ; on packages that used to kill buildd boxes, we
properly get virtual addressing space limitation errors.
For some time now, Mike Kelly has used stress-ng to stress test the hurd,
and he keeps finding bugs to
fix. He
has even started to stress test in
real hardware!
Thanks Mike for making the Hurd more stable!
He also worked on gnumach fiddling to
decrease compile time. He writes:
This implementation now searches for pages in the order: inactive/external,
inactive/internal, active/external and active/internal as suggested by Samuel
(https://lists.gnu.org/archive/html/bug-hurd/2025-12/msg00034.html). The
performance improvement is considerable. A test case involving 3 instances of
g++ compiling C++ template code (MatrixSine.cpp from libeigen-dev) uses
sufficient memory on a 4GB machine to require around 500MB of swap. This test
takes about 11 minutes with previous gnumach version (using a virtual machine)
but 3 minutes with this alteration. I have not been able to complete this test
on a 64 bit Hurd 'real hardware' installation with previous gnumach but the
compilation does complete with this patch after about 10 minutes
João Pedro Malhado updated our
alternative hurd installation documentation page.
I think it's pretty cool, that using a Debian GNU/Linux computer, one can install
the Hurd via mmdebstrap.
We also now have some people running the x86_64 hurd port on
real hardware.
Some time ago, Milos Nikic, implemented a
metadata journal for ext2fs.
It has not been commited to libdiskfs, and it is a
different design from ext3.
He writes:
This patch introduces a working implementation that captures metadata changes,
writes them to a CRC32-protected journal file, and replays them during early
boot—before fsck runs—allowing us to correct inconsistencies proactively.
I'm now using this system routinely without issues, and I believe it already
provides value for users.
Some people are mentioning on other news channels that Debian is considering
requiring rust for apt. We just want to mention that rust was ported to the Hurd,
so while there might be some challenges in getting a "rusted" apt working on the Hurd,
we do not forsee any
unsurmountable problems.
In other rust news, apparently the crate uzers-rs has recently been built with
Hurd support. Apparently,
this is quite a commonly used crate, which should help more rust code work on the Hurd.
The GNU Hurd is the GNU project's replacement for the Unix kernel. It is a
collection of servers that run on the Mach microkernel to implement file
systems, network protocols, file access control, and other features that are
implemented by the Unix kernel or similar kernels (such as Linux). More
detailed.
GNU Mach is the microkernel upon which a GNU Hurd system is based. It
provides an Inter Process Communication (IPC) mechanism that the Hurd uses to
define interfaces for implementing in a distributed multi-server fashion the
services a traditional operating system kernel provides. More
detailed.
[Less]
|
|
Posted
12 months
ago
Debian GNU/Hurd 2025 released!
Details.
It is with huge pleasure that the Debian GNU/Hurd team announces the
release of Debian GNU/Hurd 2025.
This is a snapshot of Debian "sid" at the time of the stable Debian
"Trixie" release (Auguest 2025), so it
... [More]
is mostly based on the same
sources. It is not an official Debian release, but it is an official
Debian GNU/Hurd port release.
Before posting questions on various webnews, please read
[the FAQ][faq] which will answer most if
not all of them.
For release details, please read the
announcement email.
The GNU Hurd is the GNU project's replacement for the Unix kernel. It is a
collection of servers that run on the Mach microkernel to implement file
systems, network protocols, file access control, and other features that are
implemented by the Unix kernel or similar kernels (such as Linux). More
detailed.
GNU Mach is the microkernel upon which a GNU Hurd system is based. It
provides an Inter Process Communication (IPC) mechanism that the Hurd uses to
define interfaces for implementing in a distributed multi-server fashion the
services a traditional operating system kernel provides. More
detailed.
[Less]
|
|
Posted
about 2 years
ago
Hello! Welcome to a new qoth. This qoth covers new and interesting GNU/Hurd
developments in Q2 of 2024!
Details.
Sergey Bugaev committed public
headers for
the GNU Mach AArch64 port. He writes that
...there is now a real port of GNU Mach to
... [More]
AArch64, using these headers as
its actual API/ABI. We got the Mach port to run glibc, several Hurd servers,
and simple Unix programs, including things like fork/exec and signal delivery
& handling working, which exercises these architecture-specific definitions
(thread state & exceptions). We have also managed to do some testing on real
hardware; although not everything is working yet, we have seen thread state
manipulation & Mach handling an unaligned SP fault work as expected.
His email also mentions that the GCC patches that enable GCC to compile GNU/Hurd
programs on AArch64 have been merged! This apparently will make it easier to
merge his AArch64 specific glibc patches.
He also added new tests to check that threads handle signals
well, and he
also fixed a use-after-free in
vmmappageable_scan().
He also hosted a lengthy Hurd code
jam (apologies for the poor audio
quality).
He also very notably added support to copy a send once
right to
Mach and MIG.
Some time ago, Sergey also wrote the
[terrible-mdns-responder][hurd/terrible-mdns-responder],
and if you would like to be able to type in ssh HOSTNAME.local and connect to
a locally running Hurd, then you may want to try it!
Flávio Cruz fixed some issues with the Hurd compiling
on
GCC
14.
Luca Dariz fixed message sizes, where the size was not set by
userspace,
and he added another test to check message sizes on various code
paths.
Debian GNU/Hurd now offers an experimental SMP GNU Mach
kernel (32-bit
only) and the official rustc
compiler! Now that
we have ported rustc to Debian GNU/Hurd, we can compile important packages like
librsvg. Debian GNU/Hurd now can compile 71% of the packages from the Debian
archive.
Now for something trivial but fun! I updated the guide on the Hurd wiki that
shows how one can run their own [personal ext2fs
translator][hurd/translator/ext2fs].
You could go crazy even! Why not make something like this:
~/silly <--> silly.fs
| \
| \
| \
| \
| \
\|/ \/
silly1 <-> silly1.fs
...
/hurd/joshua/silly/silly1/silly2/silly3/silly4
Each sillyN is another ext2fs filesystem! Make sure that as N gets bigger
sillyN.fs gets smaller. Let us know in the #hurd irc channel how "silly"
you are.
The current record is ~/silly1/silly2 where each sillyN is a different
ext2fs. Does anyone want to volunteer to beat the current record?
So if you want to test if your favorite packages work on the Hurd and
contribute towards making the full GNU system usable for a wider range
of people, please check the contributing page.
The GNU Hurd is the GNU project's replacement for the Unix kernel. It is a
collection of servers that run on the Mach microkernel to implement file
systems, network protocols, file access control, and other features that are
implemented by the Unix kernel or similar kernels (such as Linux). More
detailed.
GNU Mach is the microkernel upon which a GNU Hurd system is based. It
provides an Inter Process Communication (IPC) mechanism that the Hurd uses to
define interfaces for implementing in a distributed multi-server fashion the
services a traditional operating system kernel provides. More
detailed.
[Less]
|
|
Posted
over 2 years
ago
Hello! Welcome to a new qoth. This qoth covers new and interesting GNU/Hurd
developments in Q1 of 2024!
Details.
Etienne Brateau modified console-client to use xkbcommon instead of x11 for xkb
extended
support,
which improves keyboard layout
... [More]
coverage a lot!
Flavio Cruz also worked on porting GDB to the 64-bit
Hurd,
implemented setcontext/getcontext/makecontext/swapcontex () in
glibc, and implemented child process resource
accounting.
The latter implementsgetrusage(RUSAGE_CHILDREN, ) and populates child related
data in times().
He fixed the perl testsuite for the
Hurd, and he
also posted a RFC to enhance tracing
utilities,
which he used to port the RPC format to 64 bit.
Flavio also had a smattering of fixes
here,
here,
here,
here, and
here.
Damien Zammit had some fixes including fixing the console with APIC
enabled,
patching GNU Mach to support ACPI
v2, fixing
baud rate on com
ports,
porting the Hurd to some AMD
CPUs (WIP),
adding HPET (high precision
timers). He
also worked on making ext2fs use xattr by default to store
translators.
Damien also worked on more SMP fixes
here,
here,
here,
here,
here, and
here.
Hurd currently boots in SMP mode on the BSP. Damien wrote a test program that lets you run a task on the APs.
Sergey Bugaev patched binutils to support the GNU/Hurd on
AArch64, and
he wrote some patches to make the Hurd easier to port
here,
here, and
here,
Sergey also posted a fairly large RFC patch series for his AArch64
port. He
writes:
MIG seems to just work (thanks to all of Flávio's work!). I'm using
the same message ABI as on x86_64, and haven't seen any issues so far
— neither compiler errors / failed static assertions (about struct
sizes and such), nor hardware errors from misaligned accesses.
He also mentions that "the hardware hardening features (BTI, MTE, PAC) are
currently 'not really supported', but I do want to support them in the future."
Samuel merged
many
of
the
patches.
In Sergey's later glibc patch series, he wrote about the AArch64 port
progress. He
wrote:
Last time, there was no AArch64 port of GNU Mach, and so the only testing
I have done was running a simple statically-linked executable on Linux under
GDB, which, nevertheless, helped me identify and fix a number of issues.
Since then, however, I have been (some may say, relentlessly) working on
filling in the missing piece, namely porting GNU Mach (with important help &
contributions by Luca D.). I am happy to report that we now have an
experimental port of GNU Mach that builds and works on AArch64! While that may
sound impressive, note that various things about it are in an extremely basic,
proof-of-concept state rather than being seriously production-ready; and also
that Mach is a small kernel (indeed, a microkernel), and it was designed from
the start (back in the 80s) to be portable, so most of the "buisness logic"
functionality (virtual memory, IPC, tasks/threads/scheduler) is explicitly
arch-independent.
Despite the scary "WIP proof-of-concept" status, there is enough
functionality in Mach to run userland code, handle exceptions and
syscalls, interact with the MMU to implement all the expected virtual
memory semantics, schedule/switch tasks and threads, and so on.
Moreover, all of GNU Mach's userspace self-tests pass!
This meant there was enough things in place for me to try running
glibc on it, and the amazing thing is my simple test executable, the
same one I previously tested on Linux with GDB, just worked on real
Mach without me having to make any additional changes to the glibc
side, or even recompile it.
But I did not stop there, and I got several of the core Hurd servers
working! Namely, these are ext2fs, exec, startup, auth, and proc
servers. All of them but ext2fs are dynamically linked; ld
aarch64.so.1 sucessfully locates and maps the programs themselves
and their required dependencies, and Mach pages in code and data
pages from ext2fs as they are accessed, transparently to the
program, just as one would expect it to.
Be sure to read more from his announcement
email.
Sergey also announced a new Alpine distro based on Hurd (it
currently does not have a name). His goal is to add another Hurd distribution,
which will force the Hurd to work with different software and hopefully fix more
bugs. Alpine Linux also usually runs the latest software, so this new Hurd
distribution will be for those who like living on the bleeding edge. He writes:
I have ported many Alpine packages to build with (i386, for now) GNU
Mach, the Hurd, and glibc, replacing Linux and musl. If you want a
specific number: as of yesterday, I have 299 installable packages; the
number of source packages is of course several times less than that.
Still, this includes things like curl, ncurses, nano, native binutils
& gcc & mig, libffi, openrc, openssl, util-linux, busybox, apk-tools,
... and of course gnumach, hurd (with dependencies like libdaemon,
parted, ...), and glibc. Importantly, all this cleanly bootstraps
using the scripts/bootstrap.sh script that they provide; this is too
somewhat like Flávio's scripts, but it uses the real full Alpine
package definitions for e.g. GCC (patched by me for glibc / Hurd
support).
Above the kernel and libc, things remain much as they were in upstream
Alpine: the system boots (will boot — I haven't tried it yet) with
busybox init & OpenRC, and uses busybox as its basic userland. GNU
software such as Bash is installable, too.
This new Hurd distribution currently does not have a mailing list, irc room, or
website. If you are interesting
in helping Sergei to develop it further, then please email [email protected].
Luca Dariz added userspace
tests, which
work with qemu. We currently test the Hurd in qemu on a GNU/Linux host. He also described how he currently uses the 64-bit
Hurd.
Perhaps you should follow that advice if you want to try running a 64-bit Hurd
on qemu.
Manolo de Medici made a WIP patch series that gets qemu
to run on the
Hurd.
I organized a belated GNU/Hurd Christmas party. We had 6 or 7
attenders, which was pretty awesome! I was not able to record the event, so
perhaps we should try for another meet perhaps at the end of Q2. If you would
like to help me plan/organize/join such a party, then please email
[email protected].
If you want to test if your favorite packages work on the Hurd and
contribute towards making the full GNU system usable for a wider range
of people, please check the contributing page.
The GNU Hurd is the GNU project's replacement for the Unix kernel. It is a
collection of servers that run on the Mach microkernel to implement file
systems, network protocols, file access control, and other features that are
implemented by the Unix kernel or similar kernels (such as Linux). More
detailed.
GNU Mach is the microkernel upon which a GNU Hurd system is based. It
provides an Inter Process Communication (IPC) mechanism that the Hurd uses to
define interfaces for implementing in a distributed multi-server fashion the
services a traditional operating system kernel provides. More
detailed.
[Less]
|
|
Posted
over 2 years
ago
Hello! Welcome to a new qoth. This qoth covers new and interesting GNU/Hurd
developments in Q4 of 2023!
Details.
Samuel Thibault fixed gcc's Hurd's default pie and added static pie
support.
He also added a whatis
command
to GNU Mach's kernel
... [More]
debugger, which can determine what an
address points to (a stack? a port? some kalloc? ...). He also added
hurd-amd64 support to
GCC.
Samuel requested that the Hurd team set up a continuous
integration,
so that when developers make code changes, they can be certain that
they did not break anything. It turns out that the Hurd supports
several different environments: 32 bit, 64 bit, 32-on-64 bit, ACPI,
non-ACPI, SMP, non-SMP, Xen, etc. Apparently Flavio has a personal
CI,
but it is set up in a Debian independent way. If you are interested in
helping the Hurd project set up a CI, then please get in touch!
Luca Dariz worked on adding some simple GNU Mach user-space tests
.
With a working MiG, a GNU/Linux machine can run make check in the GNU
Mach source code, which will launch qemu to ensure that 32 bit (PAE
and non PAE), 32 on 64 bit, and full 64 bit GNU Mach works. We
currently do this testing on GNU/Linux, because qemu does not run on
the Hurd.
Many people worked on the Hurd's new x86_64 bit
support.
A 64-bit debian buildd is set up, and we can bootstrap a chroot! The
hurd-amd64 wanna-build infrastructure is also set up. We are having
issues reliably building packages on a 64-bit Hurd, which lead Samuel
to uncover and fix a proc
leak.
Flavio Cruz improved GNU Mach's
IPC
by reordering mach_msg_type_t fields to byte align msgt_name and
msgt_size. He also created a patch series to avoid message
resizing for
x86_64.
He also removed untyped mach RPC
code.
GNU Mach uses typed IPC. The Hurd could support both typed and
untyped, but it appears that the Hurd only uses typed RPC. So it
seems best to remove any untyped RPC code.
Sergey Bugaev added GNU Mach entry re-coalescing
support.
Essentially, Mach was not always able to merge two vm entries that are
made next to each other, which was slowing down ext2, bash, etc. Sergey
allowed GNU Mach to merge entries in the common cases, which greatly
helps ext2fs for instance.
Sergey is also working on porting the Ladybird web
browser
to the Hurd. The author of this post uses the netsurf web
browser on the Hurd, which works on
simple websites like wikipedia, but it badly renders javascript heavy
websites, which makes many websites un-useable. If Sergey is
successful in porting Ladybird, then Hurd
users could start using sites like Github! It is worth noting that
someone should update the Firefox
port as
well.
Sergey also started porting the Hurd to
AArch64!
While a port to RISC-V might be more exciting, it is worth mentioning
that AArch64 is more established. What is interesting is that Sergey
is already able to build Hurd servers for AArch64! Normally, in order
to run the binaries, one would port GNU Mach to AArch64. Luckily for
us, he turned to GDB and directly ran a 'Hello World' Hurd AArch64
binary on Linux! This helped him fix some bugs along the way. We
still need to define the ABI and complete the GNU Mach port, but this
is exciting news!
Tobias Platen started porting GNU Mach to
Power9.
So if you want to test if your favorite packages work on the Hurd and
contribute towards making the full GNU system usable for a wider range
of people, please check the contributing page.
The GNU Hurd is the GNU project's replacement for the Unix kernel. It is a
collection of servers that run on the Mach microkernel to implement file
systems, network protocols, file access control, and other features that are
implemented by the Unix kernel or similar kernels (such as Linux). More
detailed.
GNU Mach is the microkernel upon which a GNU Hurd system is based. It
provides an Inter Process Communication (IPC) mechanism that the Hurd uses to
define interfaces for implementing in a distributed multi-server fashion the
services a traditional operating system kernel provides. More
detailed.
[Less]
|
|
Posted
over 2 years
ago
Hello! Welcome to a new qoth. This qoth covers new and interesting GNU/Hurd
developments in Q3 of 2023!
Details.
Joan Lledo modified the PCI arbiter to prevent mapping I/O region
files. He previously sent some patches to implement mapping region
... [More]
and ROM files using mmap(). However, a BAR region can represent
either memory or I/O space, and only memory should be allowed to be
mapped. Since I/O BARs only contain I/O addresses, he went ahead
and prevented the mapping of I/O region
files. The
next step is to make IO spaces available for users through the
pci-arbiter. He plans to add a new RPC that checks for permission and
calls i386_io_perm_create(). Then it returns the resulting port.
Our Google summer of code student Vedant Tewari decided to port rust,
and the rust porting effort is making good progress. The build
process is a bit
wonky,
and Debian is using an older rust version. Check out the rust pull
request that adds Hurd
support!
Samuel worked on setting up
PAE,
which will eventually let us use more than 4GB of RAM on a 32-bit
Hurd! It is also useful for the X86_64 architecture. He also fixed the
jemalloc
build.
Samuel was incredibly productive this quarter making the X86_64 bit
port more stable. He fixed the 64-bit Hurd
PIE
build, and he got git
working
on the 64-bit port! Though a few of the git
tests
are failing on both X86_64 and the 32 bit port. He fixed the glibc
build,
which involved fixing pmap_remove and pmap_protect. He discovered
that core dumping is currently causing
problems
on the 64-bit port, and he temporarily encourages people to disable
core dumping. Samuel fixed some networking
issues
and a dpkg
issue
for the 64-bit port. It was hard to discover what the problem was,
because the debugging tools have not been ported to the 64-bit port.
He add some helpers to locking to fix some bugs, and he encourages other
developers to help him fix the debugging tools for X86-64. It seems
that most developers are currently running the 64-bit Hurd in a
virtual machine and not in real hardware.
Luca Dariz got a patch series merged
for
the
64
bit
port.
Sergey implemented
MAP_EXCL
and provided MAP_FIXED_NOREPLACE and MAP_TRYFIXED as aliases of
(MAP_FIXED|MAP_EXCL) as well other mmap work. He explains:
MAP_FIXED is defined to silently replace any existing mappings at
the address range being mapped over. However, this is dangerous and
only rarely desired behavior.
Various Unix systems provide replacements or additions to MAP_FIXED.
SerenityOS and Linux provide MAP_FIXED_NOREPLACE. If the address space
already contains a mapping in the requested range, Linux returns
EEXIST. SerenityOS returns ENOMEM, however that is a bug, as the
MAP_FIXED_NOREPLACE implementation is intended to be compatible with
Linux.
DragonFly BSD, NetBSD, and OpenBSD provide MAP_TRYFIXED, but with
different semantics. DragonFly BSD returns ENOMEM if the requested
range already contains existing mappings. NetBSD does not return an
error, but instead creates the mapping at a different address if the
requested range contains mappings. OpenBSD behaves the same, but also
notes that this is the default behavior even without MAP_TRYFIXED
(which is the case on the Hurd too).
Since the Hurd leans closer to the BSD side, add MAP_EXCL as the
primary API to request the behavior of not replacing existing
mappings. Declare MAP_FIXED_NOREPLACE and MAP_TRYFIXED as
aliases of (MAP_FIXED|MAP_EXCL), so any existing software that
checks for either of those macros will pick them up
automatically. For compatibility with Linux, return EEXIST if a
mapping already exists.
Damien Zammit added a USB mass storage translator via
rumpusbdisk.
Though it has some issues as he explains:
Netdde sneems to exhibit a bug when running ifdown /dev/eth0
simultanously to running the rumpusbdisk translator, because to the
two devices share the same IRQ.
Damien also worked on the Hurd's SMP support (much of his SMP
contributions is based on the earlier work done by Almudena Garcia):
He tweaked GNU Mach's
scheduler,
and he merged three GNU Mach commits.
He added a show all
runqs
command to GNU Mach's kernel debugger.
He also improved SMP in GNU
Mach
by storing the struct processor in a percpu area and avoiding an
expensive cpu_number every call of current_processor(), as well as
getting the cpu_number from an offset in the percpu area. Further
improvements can be made by using other percpu areas. It was untested
on 64 bit.
Damien also taught GNU Mach to use the x86 CPUID instruction to get
the CPU
ID
for speed. He reduced the time it takes to get the CPUID. He made it
100 times faster!
He mentioned
some issues:
60% of the time, booting a 32 bit Hurd, with SMP enabled, fails to
boot (sometimes apparently getting stuck in the rumpdisk). When it
does boot, it is not particularly stable and likely to crash.
Essentially, the SMP work is progressing, but it is not ready for
production use. His recent work made the non-SMP faster, and a 32 bit
Hurd, with SMP enabled and only one core, appears relatively stable
(but slow to
boot).
The 32-bit SMP enabled Hurd may soon be as fast as the non-SMP
Hurd.
Eventually the SMP enabled Hurd will be faster than a non-SMP Hurd.
Flavio Cruz halved the size of mach_msg_type_long_t, from 16 to 8
bytes. He also simplified the overall 64bit RPC
ABI,
removing "holes" in mach_msg_type_t or mach_msg_type_long_t, which
prevents possible leakages to userspace.
Some Hurd people talked to Kent Overstreet, the author of
bcachefs to discuss the possibility of
porting Linux's newest filesystem to the Hurd; the conversation was
recorded.
While most Hurd developers believe that it would possible to port
bcachefs to the Hurd, all agree that it would be difficult to port and
hard to maintain. No Hurd developers are currently planning or
working on porting bcachefs to the Hurd. But perhaps you want to?
So if you want to test if your favorite packages work on the Hurd and
contribute towards making the full GNU system usable for a wider range
of people, please check the contributing page.
The GNU Hurd is the GNU project's replacement for the Unix kernel. It is a
collection of servers that run on the Mach microkernel to implement file
systems, network protocols, file access control, and other features that are
implemented by the Unix kernel or similar kernels (such as Linux). More
detailed.
GNU Mach is the microkernel upon which a GNU Hurd system is based. It
provides an Inter Process Communication (IPC) mechanism that the Hurd uses to
define interfaces for implementing in a distributed multi-server fashion the
services a traditional operating system kernel provides. More
detailed.
[Less]
|
|
Posted
about 3 years
ago
Debian GNU/Hurd 2023 released!
Details.
It is with huge pleasure that the Debian GNU/Hurd team announces the
release of Debian GNU/Hurd 2023.
This is a snapshot of Debian "sid" at the time of the stable Debian
"bookworm" release (June 2023), so it
... [More]
is mostly based on the same
sources. It is not an official Debian release, but it is an official
Debian GNU/Hurd port release.
Read the announcement email.
The GNU Hurd is the GNU project's replacement for the Unix kernel. It is a
collection of servers that run on the Mach microkernel to implement file
systems, network protocols, file access control, and other features that are
implemented by the Unix kernel or similar kernels (such as Linux). More
detailed.
GNU Mach is the microkernel upon which a GNU Hurd system is based. It
provides an Inter Process Communication (IPC) mechanism that the Hurd uses to
define interfaces for implementing in a distributed multi-server fashion the
services a traditional operating system kernel provides. More
detailed.
[Less]
|