summaryrefslogtreecommitdiff
path: root/contributing.mdwn
diff options
context:
space:
mode:
Diffstat (limited to 'contributing.mdwn')
-rw-r--r--contributing.mdwn76
1 files changed, 59 insertions, 17 deletions
diff --git a/contributing.mdwn b/contributing.mdwn
index 3efa5547..f4663dda 100644
--- a/contributing.mdwn
+++ b/contributing.mdwn
@@ -15,10 +15,10 @@ Every single contribution is very much encouraged.
There are various ways to contribute; read up on contributing to...
-[[!toc levels=4]]
+[[!toc levels=2]]
-If someone of you is lurking around here and would like to contribute, but
-feels she / he could do so better under formal mentoring: please
+If you are lurking around here and would like to contribute, but
+feel you would do so better under formal mentoring: please
[[contact_us]], or just speak up at one of the [[regular IRC
meetings|IRC#regular_meetings]]!
@@ -87,17 +87,24 @@ documents.
Here is a list of small hacks, which can serve as entries into the Hurd code for
people who would like to dive into the code but just lack a "somewhere to begin
-with".
+with". Make sure to check out the most up-to-date version on
+<https://darnassus.sceen.net/~hurd-web/contributing>
+* Teach rsync to use `*getxattr` and friends on GNU/Hurd too, to enable the -X option, so as to preserve translator entries.
+* Use `thread_set_name` to add `pthread_setname_np` to glibc.
+* Avoid GCC trampolines: as discussed in <https://gcc.gnu.org/onlinedocs/gccint/Trampolines.html> these happen when we pass the address of a nested function to another function. This can be seen by running `readelf -S file.o | grep GNU-stack | grep X`, for instance that happens in libdiskfs/file-exec.c, libdiskfs/io-revoke.c. We can't really use -fno-trampoline, we should instead add `void *data` parameters to iterators such as `ports_class_iterate` or `fshelp_exec_reauth`, so that the nested functions can be made mere static functions that get their information from the `void *data` parameter.
+* Implement `pthread_setschedparam` and `sched_setscheduler` in glibc by calling mach's `thread_policy` and `thread_priority`.
+* Strengthen httpfs: it should append '/' to URL automatically, it should not fallback index.html itself, etc. probably a lot more small easy issues.
* Create a Wiki page with all presentations about the Hurd. Many are referenced here in the Wiki, but they are not easy to find.
([[!taglink open_issue_documentation]])
-* Add `UTIME_NOW` and `UTIME_OMIT`. It is a matter of taking the BSD values, add the `#define`s to the proper header, and implement the support in `*_S_file_utimes` functions. Flávio Cruz has submitted a patch, now being polished.
- See also [[!debbug 762677]].
* Some translators do not support [[hurd/fsysopts]], i.e. support for the
-file_get_fs_options and fsys_set_options RPCs.
+`file_get_fs_options` and `fsys_set_options` RPCs.
* Extend `device_read`/`device_write` into supporting > 2TiB disk sizes.
+* Make `host_get_time` much more precise by using the TSC.
* Make the Hurd [[hurd/console]]'s configuration use [[xkb layout/variant instead of keymap|hurd/console/discussion]].
-* Add NX protection support to GNU Mach.
+* Add NX / SMEP / SMAP protection support to GNU Mach.
+* Add use of PCID in GNU Mach.
+* Fix 64bit instruction set disassembling in GNU Mach's `/i386/i386/db_disasm.c` `db_disasm` function and tables.
* Write a partfs translator, to which one gives a disk image, and
which exposes the partitions of the disk image, using parted, and
the parted-based storeio (`settrans -c foos1 /hurd/storeio -T typed
@@ -107,13 +114,15 @@ part:1:file:/home/samy/tmp/foo`). This would be libnetfs-based.
`utils/{,u}mount.c` into [[glibc]].
* Add a tool to trace system calls, by using gnumach's Syscall-Emulation, see <http://www.gnu.org/software/hurd/gnumach-doc/Syscall-Emulation.html>
* Improve our [[FUSE library|hurd/libfuse]].
-* Add a relatime or lazytime option to ext2fs.
* Fix our [[open_issues/symlink_translator]].
-* Strengthen httpfs: it should append '/' to URL automatically, it should not fallback index.html itself, etc. probably a lot more small easy issues.
-* Fix `O_NOATIME`, see <https://buildd.debian.org/status/fetch.php?pkg=borgbackup&arch=hurd-i386&ver=1.0.2-1&stamp=1460838100>
* Add a /dev/rtc device
-* Implement `pthread_setschedparam` and `sched_setscheduler` in glibc by calling mach's `thread_policy` and `thread_priority`.
-* Add a `name` field to `thread` structure in Mach, and `thread_set_name` (like `task_set_name`), and use it to add `pthread_setname_np` to glibc.
+* Add gnumach support for EFI memory areas report through GetMemoryMap instead of the BIOS E820.
+* Implement `SA_NOCLDWAIT`. It means adding an RPC to proc to implement it, and then making glibc detect when setting `SIG_IGN` on `SIGCLD`, or setting the `SA_NOCLDWAIT` flag, and in that case call into `proc`, similarly to the `S_proc_mod_stopchild` RPC. proc's `S_proc_wait` shall then wait for all children and return `ECHILD`.
+* Implement `lsof`. One can get inspiration from `libshouldbeinlibc/portinfo.c` for the details.
+* Add `VSTATUS` support to `term`. Essentially in `term/munge.c`, `input_character`, just like the `VINTR`, `VQUIT`, `VSUSP`, collect a few stats from the system, and put them into the output queue.
+* Make mig use the `access` function attribute to properly express accesses in arrays, e.g. for `device_read/write_inband`.
+* Add a limitation in the number of a process that a given uid can run. That would be in the `proc` translator. That will allow to avoid crashes when an application goes crazy with forking. Setting a hardcoded limitation would thus already be useful.
+* Complete BPF program validation in `libbpf`. For instance, for now if `BPF_MOD` or `BPF_XOR` are used in a filter, it is accepted, but the matching always fails. We should pre-refuse any unknown instruction (and of course then implement `BPF_MOD` and `BPF_XOR`)
<a name="porting"></a>
## Porting Packages
@@ -150,6 +159,39 @@ Or, you can pick one from the [list of failing
packages](http://people.debian.org/~sthibault/failed_packages.txt).
+## TODO List
+
+This is the list of tasks that we *want* to address soon, starting with the most pressing:
+
+* Add amd64 support to gdb.
+* Fix shell output pipe replacement issue on amd64, see
+[discussion](https://lists.gnu.org/archive/html/bug-hurd/2023-10/msg00062.html).
+* On amd64, fix memcpy (> 16 bytes) from `/dev/mem` (makes hurd-console crash)
+* Settle CI for mig+gnumach+hurd+glibc.
+* Port `dhcpcd`, see [call for help](https://lists.debian.org/debian-hurd/2023/11/msg00030.html)
+* Extensively test (e.g. running testsuites of glibc, perl, curl) and fix the lwip-based TCP/IP stack, to be sure we don't get regressions by switching to it.
+* Prevent duplicate instances of `rumpdisk` from competing for the disk PCI cards (e.g. when a second one gets started from a chroot).
+* Fix the memory consumption of `rumpdisk`.
+* Integrate `rumpusbdisk` with the rest of the disk translators etc.
+* Fix `tmpfs` losing files, see [discussion](https://lists.gnu.org/archive/html/bug-hurd/2015-02/msg00091.html).
+* Port `libasan`/`lsan`/`ubsan`/`libtasn` so we can use these sanitizers (youpi did some of it, pending clean/submit).
+* Finish moving `pthread_` symbols from `libpthread` to `libc`, see for instance [some moves](https://sourceware.org/pipermail/libc-alpha/2023-March/146425.html), synchronize with Guy-Fleury Iteriteka.
+* Rewrite `pthread_cond_*`, `pthread_rwlock_*`, `pthread_barrier_*` to use `gsync`, like `pthread_mutex_*` do (also see the nptl implementations, possibly just share with them).
+* Improve rumpdisk's asynchronism, see end of `hurd/rumpdisk/block-rump.c`.
+* Check performance of `rumpdisk` against the in-`gnumach` drivers.
+* Make `ext2fs` use xattr by default to store translators (see `use_xattr_translator_records`) after making sure the upgrade path works fine.
+* Finish glib's file monitoring (see [merge request draft](https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3626) and [Debian bug](https://bugs.debian.org/1008208))
+* Extend `ext2fs` to support 64bit time.
+* Fix the `git` testsuite (just a few tests failing, used to pass).
+* Fix the `subversion` testsuite (just a few tests failing).
+* Fix the `vim` testsuite (just a few tests failing, used to pass).
+* Fix building `mesa`.
+* Fix building `wayland`.
+* Port `python-procps`.
+* Implement a `rumpnet`.
+* Implement a `rumpfs`.
+* Fix `SMP` support.
+
## Open Issues
There is a list of [[open_issues]]. This list includes everything from bug
@@ -180,14 +222,14 @@ First run the hurd in [[qemu|hurd/running/qemu#index1h2]]
After you have a Hurd vm set up and running:
-* `apt-get update`
-* `apt-get install -y git mercurial emacs vim`
-* `apt-get build-dep -y hurd gnumach`
+* `apt update`
+* `apt install -y git mercurial emacs vim`
+* `apt build-dep -y hurd gnumach`
* `git clone git://git.sv.gnu.org/hurd/hurd.git`
* `git clone git://git.sv.gnu.org/hurd/gnumach.git`
* `git clone git://git.sv.gnu.org/hurd/incubator.git`
* You can connect through ssh with `ssh root@localhost -p 2222`
-* Get more from the [repo list](http://git.savannah.gnu.org/cgit/hurd/).
+* Get more from the [repo list](https://git.savannah.gnu.org/cgit/hurd/).
* Read the docs on these pages.
* Start hacking.
* For shutting down, use `reboot`, then press `c` in grub and issue halt (to avoid filesystem corruption). Adding `--no-reboot` to the qemu line should help, too.