Hello, I have looked a bit further into upstream xattr support and and have been testing that using the two attached patches. As you can see, upstream reserved INDEX 10 for the Hurd, but the Hurd has been using INDEX 7. The (trivial) patch for the Hurd to change this should be OK, but until this all fully works I'm just a bit less certain about the Linux patch. Anyway, using the patched Linux we can add gnu.translator attributes to files that are recognized by Linux (on a Hurd file system) as well as by the Hurd. So now we can actually do this --8<---------------cut here---------------start------------->8--- dd if=/dev/zero of=file bs=1k count=1000 losetup /dev/loop0 file mke2fs -t ext2 -o hurd -O ext_attr /dev/loop0 mount -t ext2 -o x-xattr-translator-records /dev/loop0 /mnt mkdir -p /mnt/servers/socket touch /mnt/servers/socket/1 setfattr --name=gnu.translator --value='/hurd/pflocal\0' /mnt/servers/socket/1 getfattr --name=gnu.translator /mnt/servers/socket/1 # file: 1 gnu.translator="/hurd/pflocal" --8<---------------cut here---------------end--------------->8--- (on GNU/Linux), and I am using that now in Guix to cross build a vm-image for the Hurd. So far, so good. However, combining these does not work yet. When I reduce libexec/runsystem to something like this --8<---------------cut here---------------start------------->8--- #! /gnu/store/s8pcby4hjxf7d4pfzrwd3ngd813i8skw-bash-minimal-5.0.16/bin/bash # XXX Guile needs pipe support for its finalizer thread to start PATH=/gnu/store/6is7b5xjdfdwzym5cfhjf7jpa3824h42-hurd-0.9-1.91a5167/bin:/gnu/store/6is7b5xjdfdwzym5cfhjf7jpa3824h42-hurd-0.9-1.91a5167/sbin:/gnu/store/a4vdhbfflmbpc346lsvl3v0plplmg5ma-attr-2.4.48/bin:/gnu/store/y9vicb9spdy9lfsipv75yy5aavwf5xyn-coreutils-8.32/bin:/gnu/store/s5kx9yqqqqbvdkxcyg1243rl4fdq139b-sed-4.8/bin:/gnu/store/wy7k8v4iik6kzh9vw1fjzcnj7jhsh5fv-util-linux-2.35.1/sbin echo foo | sed s/o/O/ echo Starting /gnu/store/6is7b5xjdfdwzym5cfhjf7jpa3824h42-hurd-0.9-1.91a5167/libexec/rc ... exec /gnu/store/6is7b5xjdfdwzym5cfhjf7jpa3824h42-hurd-0.9-1.91a5167/libexec/rc --8<---------------cut here---------------end--------------->8--- the Hurd says /gnu/store/6is7b5xjdfdwzym5cfhjf7jpa3824h42-hurd-0.9-1.91a5167/runsystem: pipe error: Translator died When I leave out the echo | sed pipe, starting Guile just hangs. When I insert this --8<---------------cut here---------------start------------->8--- fsck --yes --force / fsysopts / --writable mv /servers/socket/1 /servers/socket/1-linux touch /servers/socket/1 setfattr --name=gnu.translator --value='/hurd/pflocal\0' /servers/socket/1 --8<---------------cut here---------------end--------------->8--- it works: So, we're getting real close! \o/ And I guess there must be an incompatibility between Linux and the Hurd in how setfattr embeds the xattr attributes into the file system. How to best "diff" this aspect in the file system; how to proceed? Inspired by Shengyu's GSoC code that simply seemed to use fprintf for debbugging, I tried adding some debug printing in inode.c fprintf (stderr, "gnu.translator[%d,%d]=%s\n", datalen, strlen (*namep), *namep); but that does not seem to work, or I am looking in the wrong place. Ideas? Greetings, janneke