1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
|
[[!meta copyright="Copyright © 2013 Free Software Foundation, Inc."]]
[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
is included in the section entitled [[GNU Free Documentation
License|/fdl]]."]]"""]]
[[!meta date="2024-04-05 11:07 UTC"]]
Hello! Welcome to a new qoth. This qoth covers new and interesting GNU/Hurd
developments in Q1 of 2024!
[[!if test="included()" then="""[[!toggle id=full_news
text="Details."]][[!toggleable id=full_news text="[[!paste id=full_news]]"]]"""
else="
[[!paste id=full_news]]"]]
[[!cut id="full_news" text="""
Etienne Brateau modified console-client to use [xkbcommon instead of x11 for xkb
extended
support](https://lists.gnu.org/archive/html/bug-hurd/2024-03/msg00060.html),
which improves keyboard layout coverage a lot!
Flavio Cruz also worked on [porting GDB to the 64-bit
Hurd](https://lists.gnu.org/archive/html/bug-hurd/2024-02/msg00147.html),
implemented `setcontext/getcontext/makecontext/swapcontex ()` in
[glibc](https://lists.gnu.org/archive/html/bug-hurd/2024-02/msg00106.html), and [implemented child process resource
accounting](https://lists.gnu.org/archive/html/bug-hurd/2024-02/msg00098.html).
The latter implements`getrusage(RUSAGE_CHILDREN, )` and populates child related
data in `times()`.
He fixed the [perl testsuite for the
Hurd](https://lists.gnu.org/archive/html/bug-hurd/2024-03/msg00021.html), and he
also posted a [RFC to enhance tracing
utilities](https://lists.gnu.org/archive/html/bug-hurd/2024-03/msg00034.html),
which he used to port the RPC format to 64 bit.
Flavio also had a smattering of fixes
[here](https://lists.gnu.org/archive/html/bug-hurd/2024-01/msg00219.html),
[here](https://lists.gnu.org/archive/html/bug-hurd/2024-02/msg00091.html),
[here](https://lists.gnu.org/archive/html/bug-hurd/2024-02/msg00151.html),
[here](https://lists.gnu.org/archive/html/bug-hurd/2024-03/msg00008.html), and
[here](https://lists.gnu.org/archive/html/bug-hurd/2024-03/msg00068.html).
Damien Zammit had some fixes including [fixing the console with APIC
enabled](https://lists.gnu.org/archive/html/bug-hurd/2024-01/msg00277.html),
[patching GNU Mach to support ACPI
v2](https://lists.gnu.org/archive/html/bug-hurd/2024-01/msg00278.html), [fixing
baud rate on com
ports](https://lists.gnu.org/archive/html/bug-hurd/2024-01/msg00176.html),
[porting the Hurd to some AMD
CPUs](https://lists.gnu.org/archive/html/bug-hurd/2024-01/msg00220.html) (WIP),
[adding HPET (high precision
timers)](https://lists.gnu.org/archive/html/bug-hurd/2024-02/msg00039.html). He
also worked on making `ext2fs` [use xattr by default to store
translators](https://lists.gnu.org/archive/html/bug-hurd/2024-03/msg00012.html).
Damien also worked on more SMP fixes
[here](https://lists.gnu.org/archive/html/bug-hurd/2024-02/msg00016.html),
[here](https://lists.gnu.org/archive/html/bug-hurd/2024-02/msg00021.html),
[here](https://lists.gnu.org/archive/html/bug-hurd/2024-02/msg00051.html),
[here](https://lists.gnu.org/archive/html/bug-hurd/2024-02/msg00063.html),
[here](https://lists.gnu.org/archive/html/bug-hurd/2024-02/msg00079.html), and
[here](https://lists.gnu.org/archive/html/bug-hurd/2024-02/msg00124.html).
Hurd currently boots in SMP mode on the BSP. Damien wrote a test program that lets you run a [task on the APs](https://lists.gnu.org/archive/html/bug-hurd/2024-02/msg00088.html).
Sergey Bugaev [patched binutils to support the GNU/Hurd on
AArch64](https://lists.gnu.org/archive/html/bug-hurd/2024-01/msg00000.html), and
he wrote some patches to make the Hurd easier to port
[here](https://lists.gnu.org/archive/html/bug-hurd/2024-01/msg00002.html),
[here](https://lists.gnu.org/archive/html/bug-hurd/2024-01/msg00063.html), and
[here](https://lists.gnu.org/archive/html/bug-hurd/2024-03/msg00100.html),
Sergey also posted a fairly large [RFC patch series for his AArch64
port](https://lists.gnu.org/archive/html/bug-hurd/2024-01/msg00022.html). 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](https://lists.gnu.org/archive/html/bug-hurd/2024-01/msg00050.html)
[of](https://lists.gnu.org/archive/html/bug-hurd/2024-01/msg00051.html)
[the](https://lists.gnu.org/archive/html/bug-hurd/2024-01/msg00052.html)
[patches](https://lists.gnu.org/archive/html/bug-hurd/2024-01/msg00062.html).
In Sergey's later glibc patch series, he wrote about the [AArch64 port
progress](https://lists.gnu.org/archive/html/bug-hurd/2024-03/msg00114.html). 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](https://lists.gnu.org/archive/html/bug-hurd/2024-03/msg00114.html).
Sergey also announced [a new Alpine distro based on Hurd](https://lists.gnu.org/archive/html/bug-hurd/2024-01/msg00180.html) (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 bug-hurd@gnu.org.
Luca Dariz added [userspace
tests](https://lists.gnu.org/archive/html/bug-hurd/2024-01/msg00125.html), 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](https://lists.gnu.org/archive/html/bug-hurd/2024-01/msg00047.html).
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](https://lists.gnu.org/archive/html/bug-hurd/2024-01/msg00153.html).
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
bug-hurd@gnu.org.
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|contributing]].
---
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|hurd/documentation]].
**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|microkernel/mach/gnumach]].
"""]]
|