Re: Hurd limitations
On Mon, Feb 26, 2001 at 04:16:35PM +1100, Brian May wrote:
> I have noticed several limitations with Hurd, that occur because
> it is totally different to Linux. I am wondering what long term
> solution, if any, if proposed to get around these:
> - non-root filesystems not checked on startup.
> Reason: no way to tell what filesystems exist, apart from /.
If you mean non-root = user, that's true, but I doubt you mean it. If you
mean fs's apart the root fs `/', then adding them to fstab and setting the
check flag accordingly will work, just as under Linux.
> - task packages, like task-devel-common and task-debian-devel do not
> Reason: strace wont work on the Hurd. (not sure about fakeroot).
strace is a linux specific tool, a similar tool would be quite useless on
the Hurd, because little functionality is available with syscalls to the
Mach kernel. You could keep track of the messages sent at a very basic
level, but we have rpctrace to do just that in a better way.
It should be possible to make fakeroot work if it doesn't already out of the
box. I think the reason that prevented me from looking at it was that the
build process required getopts from util-linux, and I hadn't made a crufty
util-linux package back then. I would encourage you to try it.
It's quite easy: task devel packages suffer from similar linuxisms as other
> - multiple mount-points (new feature of Linux). Is this possible on
> the Hurd? (I doubt it...)
Well, you can use the same source for several translators, but they will
conflict and scribble over each other or not recognize changes where it
overlaps with cached pages. But what we imagine is a much better solution,
called shadowfs (it's similar to unionfs in BSD), where you can layer
several filesystems over each other. One way to use shadowfs would certainly
be to layer an existing directory tree (or a distinct part of it) into the
shadow filesystem. This is a more generic approach, and much more useful
than just to be able to mount one filesystem several times. It's also not
implemented yet :)
I think it might be quite easy to get the linux feature you describe, though.
You just need to make a filesystem server advertise itself on a different node
than its root node, too. Look at how the tunnel interface is set up in
pfinet. It sets itself as the translator for /dev/tunX. From this moment,
pfinet serves requests at /dev/tunX, /servers/socket/2 and all sockets to
it. Now, pfinet does different things on each of these, but it would be even
easier to do exactly the same thing on two translated nodes.
If you'd really want this feature in a filesystem, you'd add another RPC
which would tell the filesystem server to set itself as the translator on a
certain node. (Or just pass the port directly). But I don't think it is too
useful a feature. What's the difference between mounting several times and
just setting symlinks?  
So, in short: The feature you describe could be easily implemented in the
Hurd. It would be an optimization of a specific symlink, the symlink to the
root node of the filesystem, with the extension that it would probably work
where a symlink wouldn't because of permissions (for example chroot,
probably. I am not sure). A more generic approach, shadowfs, is much more
 In Linux, you don't get "sub mounts", in fact, there is nothing like a
submount in linux. In the Hurd, you would always get the "submounts". To not
get them, you'd need to take special precautions, and it would be quite
impossible to do this cleanly, because even symlinks might just be
implemented as translated nodes (see "showtrans /usr" for a faked example).
 A symlink forwards a request to the other filesystem, while in the more
direct approach, this middle man would be eliminated.
`Rhubarb is no Egyptian god.' Debian http://www.debian.org email@example.com
Marcus Brinkmann GNU http://www.gnu.org firstname.lastname@example.org