|
|
List of Sortix Development Tasks
|
|
|
================================
|
|
|
|
|
|
This is an incomplete list of tasks that needs to be completed. Some of these tasks are directly assigned to the lead developer (Sortie) because he is probably the only one that understands the task and is able to complete it. Be sure to drop in at the #sortix IRC channel at freenode.net if you are interested in taking on some tasks.
|
|
|
|
|
|
High Level Goals
|
|
|
--
|
|
|
* Login system and passwords.
|
|
|
* Have a usable graphical user interface.
|
|
|
* Be able to build most ports on Sortix.
|
|
|
* Networking.
|
|
|
* Sortix, in space!
|
|
|
|
|
|
Technical Debt
|
|
|
--
|
|
|
* Documentation.
|
|
|
* Feature macro respecting headers.
|
|
|
* Merge NetBSD lim changes.
|
|
|
* libc header attributes not protected with underscores.
|
|
|
* libc header function parameters.
|
|
|
* Kernel debugger in graphical mode.
|
|
|
* Keyboard layout support.
|
|
|
|
|
|
Important Bugs
|
|
|
--
|
|
|
* Kernel heap can't have holes.
|
|
|
* Exhaustion of kernel virtual address space.
|
|
|
|
|
|
libc skim review
|
|
|
--
|
|
|
* Have a quick look at the functions in `libc/arpa/inet`
|
|
|
* Have a quick look at the functions in `libc/assert`
|
|
|
* Have a quick look at the functions in `libc/c++`
|
|
|
* Have a quick look at the functions in `libc/calltrace`
|
|
|
* Have a quick look at the functions in `libc/ctype`
|
|
|
* Have a quick look at the functions in `libc/dirent`
|
|
|
* Have a quick look at the functions in `libc/dlfcn`
|
|
|
* Have a quick look at the functions in `libc/errno`
|
|
|
* Have a quick look at the functions in `libc/error`
|
|
|
* Have a quick look at the functions in `libc/fcntl`
|
|
|
* Have a quick look at the functions in `libc/fnmatch`
|
|
|
* Have a quick look at the functions in `libc/fsmarshall`
|
|
|
* Have a quick look at the functions in `libc/getopt`
|
|
|
* Have a quick look at the functions in `libc/grp`
|
|
|
* Have a quick look at the functions in `libc/init`
|
|
|
* Have a quick look at the functions in `libc/inttypes`
|
|
|
* Have a quick look at the functions in `libc/libgen`
|
|
|
* Have a quick look at the functions in `libc/locale`
|
|
|
* Have a quick look at the functions in `libc/malloc`
|
|
|
* Have a quick look at the functions in `libc/msr`
|
|
|
* Have a quick look at the functions in `libc/netdb`
|
|
|
* Have a quick look at the functions in `libc/poll`
|
|
|
* Have a quick look at the functions in `libc/pwd`
|
|
|
* Have a quick look at the functions in `libc/regex`
|
|
|
* Have a quick look at the functions in `libc/sched`
|
|
|
* Have a quick look at the functions in `libc/signal`
|
|
|
* Have a quick look at the functions in `libc/stdio`
|
|
|
* Have a quick look at the functions in `libc/stdlib`
|
|
|
* Have a quick look at the functions in `libc/sys/display`
|
|
|
* Have a quick look at the functions in `libc/sys/ioctl`
|
|
|
* Have a quick look at the functions in `libc/sys/kernelinfo`
|
|
|
* Have a quick look at the functions in `libc/syslog`
|
|
|
* Have a quick look at the functions in `libc/sys/mman`
|
|
|
* Have a quick look at the functions in `libc/sys/mount`
|
|
|
* Have a quick look at the functions in `libc/sys/readdirents`
|
|
|
* Have a quick look at the functions in `libc/sys/resource`
|
|
|
* Have a quick look at the functions in `libc/sys/select`
|
|
|
* Have a quick look at the functions in `libc/sys/socket`
|
|
|
* Have a quick look at the functions in `libc/sys/stat`
|
|
|
* Have a quick look at the functions in `libc/sys/statvfs`
|
|
|
* Have a quick look at the functions in `libc/sys/termmode`
|
|
|
* Have a quick look at the functions in `libc/sys/time`
|
|
|
* Have a quick look at the functions in `libc/sys/uio`
|
|
|
* Have a quick look at the functions in `libc/sys/utsname`
|
|
|
* Have a quick look at the functions in `libc/sys/wait`
|
|
|
* Have a quick look at the functions in `libc/termios`
|
|
|
* Have a quick look at the functions in `libc/time`
|
|
|
* Have a quick look at the functions in `libc/timespec`
|
|
|
* Have a quick look at the functions in `libc/ubsan`
|
|
|
|
|
|
Upstreams
|
|
|
--
|
|
|
* What's with obscure mono inclusions of malloc.h?
|
|
|
* Obscure `#define _GNU_SOURCE` declaration in `mono/mono/profiler/proflog.c`.
|
|
|
* Why does libressl still use zlib? I thought they removed compression support. Actually, take a closer look at `c_zlib.c` there. It's scary.
|
|
|
* Ensure all relevant libcs set the asprintf result string to NULL upon failure.
|
|
|
* Perhaps make some common sins website where you describe things in more detail, meant to be used / copy pasted when reporting common portability flaws to upstream projects.
|
|
|
* Upstream psignal parameter constness patch for libiberty (see binutils).
|
|
|
* Upstream no-map-32bit patch to Mono.
|
|
|
* Upstream to wget: Wait for your patch to get into gnulib, then ask them to update lib/getpass.c.
|
|
|
* Upstream to GNU Make developers that they shouldn't use putenv.
|
|
|
* Upstream to libtheora developers they shouldn't use `sys/timeb.h` but the modern APIs instead. Additionally, the time calculation they do is entirely unsafe. Perhaps it's better to just remove the code. Is it built by default?
|
|
|
* Upstream to libgnutls developers that the tests shouldn't call the `siginterrupt` function but use sigaction instead.
|
|
|
* Upstream to libgnutls (libopts?) developers that libopts compat.h shouldn't include `memory.h`.
|
|
|
* Upstream to libgnutls developers that they should use `sys/select.h`.
|
|
|
* Upstream to libgnutls developers that the randomart files shouldn't use the `u_int` type.
|
|
|
* Upstream to dbus developers they should use setenv instead of putenv.
|
|
|
* Upstream to dbus developers they should use fcntl.h instead of sys/fcntl.h.
|
|
|
* Upstream to dbus developers they should include alloca.h in a file as seen in the patch?
|
|
|
* Upstream to dbus developers they should use poll.h instead of sys/poll.h.
|
|
|
* Upstream to git developers that putenv shouldn't be used.
|
|
|
* Upstream better libintl and libiconv logic in `git/Makefile`.
|
|
|
* Upstream bochs bug pathced in iodev/vgacore.cc.
|
|
|
* Upstream to bison developers that doc/bison.info and doc/cross-options.texti perhaps should be cleaned as well, or why are they regenerated when I build it?
|
|
|
* Upstream to bison developers that they shouldn't use gnulib to the extent that it replaces the full printf family.
|
|
|
* Upstream to bison developers that make clean perhaps shouldn't delete doc/figs?
|
|
|
* Upstream to bison developers that they shouldn't run cross-compiled programs.
|
|
|
* Upstream to Mesa that it doesn't distclean properly.
|
|
|
* Upstream to Nasm developers that distclean doesn't delete doc/Makefile.
|
|
|
* Upstream to Nasm developers that they should use `DESTDIR` instead of `INSTALLROOT`.
|
|
|
* Upstream to libxml2 developers that the cleantar target shouldn't delete `COPYING.LIB` or `COPYING` (see patch).
|
|
|
* Upstream to libxml2 developers that they shouldn't install a xml2-config script.
|
|
|
* Upstream to libtheora developers that building the documentation means running cross-compiled programs.
|
|
|
* Upstream to the libpng developers that the libpng pkg-config script doesn't link against libz or libm. What is the --with-binconfigs=no configure option used about?
|
|
|
* Upstream to libgnutls developers that (according to the patch) doc/errcodes isn't cross-compiled properly.
|
|
|
* Upstream to freetype developers they shouldn't be installing freetype-config scripts (at least by default?).
|
|
|
* Upstream to libexpat developers they should inherit DESTDIR from the environment.
|
|
|
* Upstream to libav / ffmpeg guys that they should use poll.h instead of sys/poll.h.
|
|
|
* Upstream to libav / ffmpeg guys that they configure script should accept exec-prefixes and use build, host and target when cross-compiling. Alternatively make them use autoconf. Alternatively nuke the package as it's buildsystem was written by people that don't care.
|
|
|
* Upstream to groff developers that it doesn't make distclean properly.
|
|
|
* Upstream to git developers that distclean shouldn't delete configure as it ships with configure.
|
|
|
* Upstream to gettext developers that they should print pids portably.
|
|
|
* Upstream to gnulib developers if they are still still doing the `__sysconf` nonsense.
|
|
|
* Upstream to dash developers that they should print pids portably.
|
|
|
* Upstream to dash developers that getpgid should be used instead of getpgrp.
|
|
|
* Upstream to bzip2 developers that they should support exec-prefixes and DESTDIR.
|
|
|
* Upstream to bochs developers that DESTDIR should be inherited from the environment in Makefile.in and doc/docbook/Makefile.in.
|
|
|
* Upstream to bochs developers that distclean is not called dist-clean.
|
|
|
* Upstream to bochs developers that pkg-config should be used instead of sdl-config.
|
|
|
* Upstream to bochs developers that it should be able to make install over an existing installation.
|
|
|
* Upstream to emacs developers they should not use their malloc but the system one.
|
|
|
* Upstream to libfontconfig developers that doc/edit-sgml shouldn't be both cross-compiled and then executed locally.
|
|
|
* Adapt these patches yourself and if OpenBSD haven't, then upstream them crediting them: Use `time_t` instead of `long` for bfd times: http://freshbsd.org/commit/openbsd/1ec842093c20e2ccf2f70ecc54d0553cb4a2907f http://freshbsd.org/commit/openbsd/6de39987fa4c5ae115f7fd66fa3f91086b63214f http://freshbsd.org/commit/openbsd/441aa509d78170f437d3fbfef5dbd2cfbf6d7c25 http://freshbsd.org/commit/openbsd/ae6a03697721810dee1879e7a30a5fac9028a4a9 http://freshbsd.org/commit/openbsd/63d2245dbb0d67abf09f972e28f9d6fed2a505a4 http://freshbsd.org/commit/openbsd/0b7d1df63c6a604b1919310e68c50ffd3ab7d9bd http://freshbsd.org/commit/openbsd/d7d4be6c2dd7c2438f18e84adb729b69fed7d057
|
|
|
|
|
|
Secondary Goals
|
|
|
--
|
|
|
* Add -R to sort as build-ports.sh needs it.
|
|
|
* Holes in kernel heap.
|
|
|
* Tab completion for which.
|
|
|
* Tab completion for directories/files when doing FOO=/tab.
|
|
|
* Properly implement getpeername(2) and getsockname(2) and shutdown(2) in the kernel.
|
|
|
* Why does big -j options to Make lock up Sortix?
|
|
|
* Truncate the console cursor upon console resize.
|
|
|
* Fix that change resolution repeatedly bug once and for all.
|
|
|
* Verify _all_ memory mappings in the kernel (and protection changes) to verify the TLB gets flushed properly.
|
|
|
* What happens if multiple threads assert fail concurrently?
|
|
|
* Does pipes still emit a sigpipe that is delivered later when sigpipe is blocked at the time of the bad write?
|
|
|
* Add `pthread_atfork`. Or wait, POSIX is obsoleting that?
|
|
|
* The libm is missing a lot of functions like acoshl.
|
|
|
* Add pselect.
|
|
|
* Does fdopen verify the fd is sane? What about fdopendir? Should it?
|
|
|
* Add memdup.
|
|
|
* Add strcasecoll.
|
|
|
* Add strptime.
|
|
|
* The initrd format needs to preserve nanoseconds.
|
|
|
* Signals and EINTR and stdio functions.
|
|
|
* Make a malloc0 function and implement calloc using that.
|
|
|
* Consider adding mkdtemp.
|
|
|
* Consider adding mksotemps and implement mkostemp and mkstemps and mkstemp using it.
|
|
|
* Consider switching to err() instead of error(). Investigate how portable it is. error() might just be a glibc-ism.
|
|
|
* `pthread_mutex_lock` can mistakenly believe a new thread owns a lock that was held by a thread that exited, if the new thread got the same pthread_self() value. POSIX requires this to deadlock instead, see Austin Group 755 and musl commit fffc5cda10e0c5c910b40f7be0d4fa4e15bb3f48.
|
|
|
* POSIX doesn't properly define what termination status means?
|
|
|
* Does the standard library correctly handle system calls that fail with EINTR? Make a list of all that can fail with EINTR and then verify each call in libc.
|
|
|
* Does pclose correctly handle EINTR?
|
|
|
* timegm and other time functions are likely not robust against overflow.
|
|
|
* libc-test claims sigaddset should not set "implementation internal real-time" signals.
|
|
|
* libc-test claims sigaltstack should return ENOMEM for too small stacks (size < `MINSIGSTKSZ`).
|
|
|
* libc-test has found a bunch of scanf issues.
|
|
|
* Should `pthread_create` really return EAGAIN on resource exhaustion instead of ENOMEM as the libc-test claims?
|
|
|
* Should `pthread_condattr_setclock` reject the cputime clocks?
|
|
|
* The libc-test `src/functional/iconv_open` fails on opening "", "" with GNU libiconv but should EINVAL?
|
|
|
* Make getpagesize a constant macro on particular platforms.
|
|
|
* Delete clock(3).
|
|
|
* The waiting APIs that wait for an absolute struct timespec on `CLOCK_REALTIME` without being able to change the block are stupid. Make new APIs or enhance the existing ones. See `semaphore_timedwait`.
|
|
|
* Tix without `HOST_SYSTEM_ROOT` in `CC_FOR_BUILD`.
|
|
|
* Verify the inline assambly in kernel/include/ioport.h.
|
|
|
* Support LDFLAGS and LIBS in Sortix makefiles.
|
|
|
* Sortix `TIMER_MAX` in sys/types.h conflicts with POSIX `TIMER_MAX` in limits.h.
|
|
|
* Fix that "r8" doesn't work as a constraint in inline assembly, as discussed with Griwes and mrvn in #osdev on 2014-05-31.
|
|
|
* Nuke suseconds_t? Nuke useconds_t?
|
|
|
* The compiler needs to provide `__SSIZE_MIN__` and `__SSIZE_MAX__`.
|
|
|
* Ensure Sortix interrupt disabling (during boot) is done in accordance with http://forum.osdev.org/viewtopic.php?p=236455#p236455
|
|
|
* Add menu to chkblayout.
|
|
|
* Fix sortie's commit hook not escaping + characters.
|
|
|
* Add msync.
|
|
|
* Sin: Not cross-compiling to unknown platforms.
|
|
|
* Finish unmount tool.
|
|
|
* Fix asteroids input where you can't press multiple keys at once, such as pressing space and then using the cursor keys. This problem appears to happen prior to `PS2Keyboard__InterruptWork`, meaning that it is either an emulator bug (unlikely, since it happens in both VirtualBox and Qemu - test on real hardware?), or the PS2 driver is using the hardware incorrectly. Perhaps there are limits on the complexity of pending keystrokes?
|
|
|
* Is `-Wtype-limits` harmful because `(uintmax_t) OFF_MAX < (uintmax_t) buffer_size` may give a warning?
|
|
|
* Why does -Werror=c++-compat when assembling with gcc warn about xor and or and such?
|
|
|
* Fix the editor randomly mixing operator new[] and malloc with free and operator delete[].
|
|
|
* Carefully verify whether Sortix suffers from http://lwn.net/Articles/575477/ and do the needed design changes.
|
|
|
* Does `Ref<Inode>` inode work correctly in the mount table? What about when it is resized?
|
|
|
* Fix that newer mount points on the same device / inode take precedence. Is the case of multiple mount points on the same device / inode even really implemented?
|
|
|
* Finish unmount support.
|
|
|
* Finish rewriting ls.
|
|
|
* Consider `REG_TRAPNO` and `ERROR_sig` in the struct ucontext stuff and research what they are actually for, also reconsider the floating point format, that is, be more like Linux if not stupid.
|
|
|
* Consider `UTIME_OMIT` and `UTIME_NOW`.
|
|
|
* `grep -EIR 'exit[[:space:]]*\([[:space:]]*-[[:space:]]*1[[:space:]]*\)' ports`
|
|
|
* Fix "-lpthread" warning in gcc `warning: cast from type ‘const char*’ to type ‘char*’ casts away qualifiers [-Wcast-qual]`.
|
|
|
* Sortix has no `<limits.h>` and the compiler one is not good!
|
|
|
* Practice 2038 on Sortix to confirm we are safe.
|
|
|
* Tix might want to detect packages that require themselves installed locally to cross-compile.
|
|
|
* Fix installed scripts using #! automatically.
|
|
|
* expr: `'foo' ':' 'foo\(.*\)'`
|
|
|
* Alt-tab in display should show a list of windows open.
|
|
|
* tix-fix-shebang
|
|
|
* gzip makefile replaces /bin/sh with `$(SHELL)`.
|
|
|
* xz replaces #!@POSIX_SHELL@ with a shell.
|
|
|
* Fix #! in yacc (bison), groff, gettext, bzip2, git.
|
|
|
* `inet_aton`, `inet_neta`, `inet_ntop`, `inet_pton` (and ew, `inet_addr`, `inet_ntoa`). Potentially a superior interface is required.
|
|
|
* Kill sprintf.
|
|
|
* Add madvise.
|
|
|
* Check out `AT_EMPTY_PATH' used in fstatat(2) on linux.
|
|
|
* How to handle strftime() buffer-is-too-small properly? It appears that POSIX/ISO C doesn't allow it to set errno?
|
|
|
* mmap flag MAP_NOREPLACE?
|
|
|
* Is OpenBSD strtonum a good thing?
|
|
|
* porttix-produce (implement srctix-create using this).
|
|
|
* Google for what security things we can make sortix-gcc use.
|
|
|
* Let `abort`, `assert` and such failure examine a /etc/kernel_debug file and launch the kernel debugger on a failure.
|
|
|
* Add `mincore`.
|
|
|
* Add `TIOCOUTQ` and `TIOCMGET` and `TIOCMSET`.
|
|
|
* Add `FIONBIO` and `SIOCATMARK` and `FIONREAD`. Wait, are those obsolete things? FIONBIO is.
|
|
|
* Add `PTHREAD_STACK_MIN`.
|
|
|
* Add `pthread_kill`.
|
|
|
* Add `pthread_cleanup_push` and `pthread_cleanup_pop`.
|
|
|
* Add pthread_stackseg_np from OpenBSD.
|
|
|
* Consider whether list-all-possible-tab-completions on first tab is preferable to the usual second-tab semantics. Doing it on the first makes Sortix seem more responsive.
|
|
|
* Add a gcc warning that can be -Werrored for `warning: initialization from incompatible pointer type`.
|
|
|
* How to best write thread-secure code (using mutexes) in libc parts that also go in libk?
|
|
|
* Potentially wrap sigaction or such to ensure that signal handlers don't change errno - or rather, trap it.
|
|
|
* Add a /dev/random device even if it isn't that good.
|
|
|
* A sync() system call could just sync all open fds in the process.
|
|
|
* Werror=format in tix-build (or build-ports.sh). However, ports will need cleansing before this.
|
|
|
* Always set variables such as `CC` and `CC_FOR_BUILD` in tix-build.
|
|
|
* Delete the `kernelinfo` system call and replace it with something superior.
|
|
|
* Add `_FORTIFY_SOURCE` support.
|
|
|
* Check pedigree's ports at `https://github.com/pcmattman/pedigree-apps/tree/master/packages` and see if you can port any of that you are missing.
|
|
|
* Add `TIOCGWINSZ` as a tcgetwinsize replacement.
|
|
|
* Add test(1) program.
|
|
|
* Investigate the mono eglib write_all function, it looks like they replaced ssize_t with int.
|
|
|
* Decide on how to deal with shebang scripts and package up how you dealt with them in gzip.
|
|
|
* Benchmark malloc performance.
|
|
|
* Fix Linux wanting to run Sortix programs.
|
|
|
* Doing configure tests using make.
|
|
|
* Add BSD optreset for use in getopt?
|
|
|
* Should cat error if input file is output file?
|
|
|
* Perhaps a libshowline?
|
|
|
* Should init unset SHLVL?
|
|
|
* Add BSD make conditionals and for loops to GNU make. Oh hey, could that be a GSOC?
|
|
|
* Potentially split sh into multiple files?
|
|
|
* Bochs and SDL are missing a bunch of keys. :-(
|
|
|
* Restore FILE support in the kernel.
|
|
|
* Research and drop the feature where fflush(NULL) flushes everything?
|
|
|
* Drop fcloseall() as it is not thread-safe and it's not that useful, integrate it directly into exit(3). See also dcloseall().
|
|
|
* Remove fpipe()?
|
|
|
* Implement `SA_NODEFER` and `SA_RESETHAND`.
|
|
|
* Can we replace almost all `__SIZE_TYPE__` uses with `__size_t`?
|
|
|
* Go through a login program instead of having init start sh directly.
|
|
|
* How is it ensured that only a single thread can execve at once?
|
|
|
* Test sockets receive SIGPIPE.
|
|
|
* Implement proper signal routing in a multithreaded process.
|
|
|
* Use reallocarray and such all over the tree.
|
|
|
* Add memem(3).
|
|
|
* `qsort_r` has a memswap function. Can we optimize this? Should this be a proper libc function as it is a bit useful. Does any existing systems have this?
|
|
|
* Add `flushlbf_unlocked`?
|
|
|
* Add `fsetpos_unlocked`.
|
|
|
* Add `fgetpos_unlocked`.
|
|
|
* Tix-build should have an option to reload the tixbuildinfo and potentially restart the build.
|
|
|
* Empty strings in PATH between colons documented in posix-divergence.
|
|
|
* Require execute bit to be set in execve(2) and which(1).
|
|
|
* Look at every Sortix file and tag those that need security reviews or other annotations of needed effort.
|
|
|
* Systest the new sigsetjmp and siglongjmp calls as well as setjmp and longjmp!
|
|
|
* Is the paging fork code thread secure?
|
|
|
* Kill `-Wtype-limits`.
|
|
|
* The futimens and utimensat system calls doesn't work with a NULL time parameter which should set the current time (?).
|
|
|
* Use brighter colors in Sortix now that we can?
|
|
|
* Make Sortix libpthread stringent?
|
|
|
* Finalize signal code that delivers SIGSEGV and deliver other kinds of signals on user-space crashes.
|
|
|
* Fix that ld isn't built with sysroot support by default.
|
|
|
* Investigate what happens when loading an ELF program fails.
|
|
|
* Copyright© is redundant?
|
|
|
* Merge OpenBSD minherit features into mmap.
|
|
|
* Investigate all cases that can cause the kernel to panic and make observations.
|
|
|
* Add a function to assert that a mutex is owned.
|
|
|
* Make a policy on whether preprocessor sections for unknown platforms should give #warnings or #errors and apply it consistently.
|
|
|
* Asteroids random float generation code is bad.
|
|
|
* Is there a way to disable builtin rules from the Makefile itself?
|
|
|
* A libshowline would be useful in a bunch of utilities.
|
|
|
* `stdlib.h` needs to honor feature macros as it doesn't work in C89 mode.
|
|
|
* Port indent, xorriso?
|
|
|
* Redo the fractal mapping now that you understand it better.
|
|
|
* Unicode support in column(1).
|
|
|
* Add arpa/nameser.h API stub.
|
|
|
* Automated tool to check which #include statements can be removed from files.
|
|
|
* Fix security issues in initrd code.
|
|
|
* Use gcc attributes like nonnull and sentinel (OpenBSD extension?).
|
|
|
* API to skip the next N bytes on a pipe if you really don't care? Perhaps based on lseek like SEEK_PIPESKIP? Also API for sending a large amount of zeroes?
|
|
|
* Implement SO_NOSIGPIPE.
|
|
|
* Implement F_SETPIPE_SZ and F_GETPIPE_SZ.
|
|
|
* Add closefrom, gedtablecount from OpenBSD (perhaps built on fcntl, but atomicy issues?).
|
|
|
* Add `__STDC_ISO_10646__`.
|
|
|
* Add strerrno() or something that lets you get "EFOO" if you have the int value of EFOO.
|
|
|
* Support for booting directly into a test program for automatic testing purposes.
|
|
|
* Add feature macro preprocessor conditionals to standard library headers.
|
|
|
* Thread-secure gethostname(3), getdomainname(3).
|
|
|
* Some kind of memory accounting in malloc that lets you know who allocated what.
|
|
|
* Add graphics mode support to the kernel debugger.
|
|
|
* Improve boot time, perhaps remove GRUB cat background.
|
|
|
* Proper mv(1).
|
|
|
* Add #define VERSIONSTR "unknown version" to utils programs that doesn't have it.
|
|
|
* TERM must be set to not dumb for grep colors to work, comment that out for Sortix or set term?
|
|
|
* Add regular expressions to expr(1).
|
|
|
* Running executables with sh in execvp.
|
|
|
* Sending wait events to the parent even if the child hasn't exited as such.
|
|
|
* SIGSTOP and SIGCONT.
|
|
|
* Implement superior alternative to nftw(3).
|
|
|
* aligned_alloc(3).
|
|
|
* posix_memalign(3)?
|
|
|
* getsubopt(3)?
|
|
|
* Kernel `bool is_aligned(uintptr_t addr, size_t alignment)` function.
|
|
|
* Improve or get rid of useless benchmarks.
|
|
|
* Remove not_esp from x86-64.
|
|
|
* Verify the inline assambly in kernel/include/ioport.h.
|
|
|
* x86-family/x86-family.cpp Reboot() needs a look over.
|
|
|
* Add /proc filesystem.
|
|
|
* unix sockets have actual files in the filesystem.
|
|
|
* open_memstream
|
|
|
* fsetlocking_unlocked isn't actually implemented. Perhaps just kill the crappy stdio_ext.h interface. However, gnulib may actually depend on it.
|
|
|
* Does ungetc work for unbuffered files?
|
|
|
* Develop AHCI driver for proper harddisk access.
|
|
|
* Consider using static __thread variables instead of static variables in some libc functions that are not thread safe.
|
|
|
* Investigate x86emu (see x86emu branch or what it is called).
|
|
|
* Allow controlling O_NONBLOCK-ness too through ioctx.
|
|
|
* Tix tool to extract patches from porttixes.
|
|
|
* Research aux vector.
|
|
|
* Test pthread mutxes
|
|
|
* Test pthread condition variables.
|
|
|
* Test pthread thread specific variables (`pthread_key_create`).
|
|
|
* Test pthread read/write locks.
|
|
|
* Get rid of the Vnode class in the kernel and move it into the Descriptor class.
|
|
|
* Finish implementing signals.
|
|
|
* Test signals.
|
|
|
* Does Unix socket bind properly handle missing nul terminators?
|
|
|
* -mcmodel=large?
|
|
|
* Verify Sortix works at all optimization levels.
|
|
|
* Verify no warnings happens at all optimization levels.
|
|
|
* sigwait(2), sigtimedwait, sigwaitinfo?
|
|
|
* Reform <stdint.h> using GCC's builtin macros to supply the information. Is UINTPTR_C missing from stdint.h? Should it exist?
|
|
|
* $ in printf so we parameters can be printed in any order.
|
|
|
* Combine O_SEARCH and O_EXEC into the same flag.
|
|
|
* seekdir and telldir - though they use long instead of off_t, seekdiro and telldiro?
|
|
|
* Report useful information in kram statvfs.
|
|
|
* Report useful information in ext2 statvfs.
|
|
|
* Make sure the format(printf, ...) attribute is set on all the printf function calls (and scanf, strftime and such) - keep in mind the compiler sets the attribute automatically, at least for someof the functions.
|
|
|
* CopyToUser and CopyFromUser should set cr2?
|
|
|
* signalfd(2).
|
|
|
* timerfd(2).
|
|
|
* recvmsg and sendmsg (wip in staging)
|
|
|
* MSG_ and CMSG_ macros.
|
|
|
* IN6_IS_
|
|
|
* in6addr_any and in6addr_loopback.
|
|
|
* struct ucred in sys/socket.h.
|
|
|
* SO_PEERCRED?
|
|
|
* %r (or what it was) to recursively process a va_list and format in printf?
|
|
|
* Somehow prevent other threads from registering new FILEs and DIRs when one thread is attempting to exit() and fcloseall() and dcloseall().
|
|
|
* Attempt to rebase branches on kernel to much crash and burn as you update the older kernel code to the current coding conventions.
|
|
|
* Write a proper shell.
|
|
|
* Assign threads pid's too?
|
|
|
* extern "C++" trick from GNU libc headers.
|
|
|
* Perhaps a enter_kernel_debugger() system call?
|
|
|
* Possibly find better key than F10 for kernel debugger.
|
|
|
* Consider disabling the kernel debugger by default.
|
|
|
* Add `<stringify.h>` and `<__/stringify.h>` with `__STRINGIFY`.
|
|
|
* Implement SIGSEGV, SIGBUS, SIGILL and so.
|
|
|
* Allow safe kprintf from interrupts, possibly possible by extending the new panic kernel log recovery code.
|
|
|
* sys_truncateat perhaps should be called sys_ftruncateat and accept a flags parameter.
|
|
|
|
|
|
Bugs
|
|
|
----
|
|
|
* Fix ports using FIONBIO when they shouldn't.
|
|
|
* alarm(0) may cause system deadlock (as seen in extfs).
|
|
|
* forkbomb'ing can result in a panic because of a bad pointer. This is likely a consequence of improper memory allocation failure handling and misuse of operator new on classes with construcors.
|
|
|
* SIGSEGV can deadlock the processor during sys_exit!
|
|
|
* Am I doing IRQ stuff correctly with cli in boot.s? #osdev log Tue Feb 12 2013. (around /me by sortiecat)
|
|
|
* "pcmattman: sure, but don't install the #DF as a normal interrupt handler, IIRC it should be a task gate with a 'known-safe' CR3 and such." (2013-04-16)
|
|
|
* Page::Put calls may internally Page::Get and then reusing pages we are not done with just yet.
|
|
|
* Unlikely, but possible, Sortix::Descriptor::dflags race condition
|
|
|
|
|
|
Changes in Sortix 0.9 so far
|
|
|
----
|
|
|
* Improved Unix signals.
|
|
|
* Basic pthread support.
|
|
|
* Thread local storage.
|
|
|
* Thread-secured standard library.
|
|
|
* System testing framework.
|
|
|
* Documentation improvements.
|
|
|
* Numerous standard library and kernel enhancements.
|
|
|
* Many bug fixes.
|
|
|
* Older code has been cleaned up and converted to the current coding conventions.
|
|
|
* Rename kernel directory from sortix/ to kernel/.
|
|
|
* Remove custom mxmpp preprocessor tool.
|
|
|
* And many miscellaneous improvements.
|
|
|
|
|
|
Newbie Tasks
|
|
|
----
|
|
|
* Fix bsearch performance.
|
|
|
* Add rawmemchr(3).
|
|
|
|
|
|
Small stuff
|
|
|
----
|
|
|
* glob(3) (do we need a more powerful Sortix extension?)
|
|
|
* freading/fwriting/freadable/fwriteable is implemented incorrectly.
|
|
|
* Save floating point registers in setjmp(3) and longjmp(3).
|
|
|
* strtox_l family. These can just be calls to strtol for now as there are no supported locales where they are different, but it's nice to have the prototypes.
|
|
|
* strmon_l(3) and strmon(3).
|
|
|
* sysexits.h
|
|
|
* tar.h (Or do we supply this through GNU tar if that package installs it?)
|
|
|
* cpio.h (Or is cpio unthing?)
|
|
|
* fmtmsg(3) (or should this be delayed for later?)
|
|
|
* nftw(3) (ftw(3) if useful and not unfunction) (do we need a more powerful Sortix extension?)
|
|
|
* Consider C11 uchar.h.
|
|
|
* Consider doing a uname(3) replacement that doesn't use silly fixed width strings.
|
|
|
|
|
|
Medium stuff
|
|
|
----
|
|
|
* Implement flock(2).
|
|
|
* Add kqueue(2).
|
|
|
* mremap(2).
|
|
|
* termios.h (stubs?)
|
|
|
* Refactor PS2 driver and add mouse driver.
|
|
|
* Make system calls pointer safe.
|
|
|
* True sleep in kthread_cond_wait.
|
|
|
* i825xx driver. This is already underway in a branch. Completion probably requires considerable kernel improvements.
|
|
|
* Write a Radeon driver. This is already underway in a branch. Completion probably requires considerable kernel improvements. This also requires knowledge on how to do mode setting on such chips and likely how to use AtomBIOS. Are there binary blob problems here?
|
|
|
* Intel HD Audio This is already underway in a branch. Completion probably requires considerable kernel improvements.
|
|
|
* fork(2) copy-on-write. This likely requires considerable kernel enhancements.
|
|
|
* Display server (possibly implement a Wayland display server or port one).
|
|
|
* Ethernet/ARP/IP/TCP/UDP/DNS.
|
|
|
* Better random number generation: the current rand() implementation can't be reduced to using a 32-bit seed as suggested by rand_r(3).
|
|
|
* Userspace terminals.
|
|
|
* Proper implementation of Unix ttys.
|
|
|
* Task oriented rather than process/thread oriented.
|
|
|
* Refactor program loader framework.
|
|
|
* Program loader understands shebang.
|
|
|
* User-space console rendering.
|
|
|
* Rewrite kernel graphics support.
|
|
|
* setcontext(3), getcontext(3), makecontext(3), swapcontext(3), etc. Is this task already underway, possibly in the signal branch?
|
|
|
* Write a libdispd handler for rendering VGA text mode buffers in graphics mode. Perhaps this should wait until the kernel graphics support is rewritten.
|
|
|
* Don't fully stop the system when it panics, but rather keep important threads alive.
|
|
|
* Fix bugs in kernel debugger
|
|
|
* Undo and redo in editor.
|
|
|
* Portable mechanism for system calls with many parameters and huge return values that automatically kicks in if needed.
|
|
|
* Throttle allocation such that running out of pid's takes a Unix epoch.
|
|
|
* Fix year 2038 bug in ext2 timestamps.
|
|
|
* /etc/profile?
|
|
|
* Support for hooking the serial input up against the keyboard API have broken - this should perhaps not be done as the serial console is not a keyboard as such.
|
|
|
* Dynamic linking.
|
|
|
* Remove gettimeofday(3) and fix all third party software that uses it by using clock_gettime instead.
|
|
|
* Rectify unfunction calls in third party software (doc/obsolete-stuff).
|
|
|
|
|
|
Merging to master
|
|
|
--
|
|
|
* Read task list and check for outstanding bugs in the work.
|
|
|
* Ensure standard library headers are usable even in c89 mode.
|
|
|
* Inspect and review the commits.
|
|
|
* Check for typos in the commit messages.
|
|
|
* Check commits for white-space problems using git show --check.
|
|
|
* Verify that each commit complies with the coding conventions.
|
|
|
* Build each commit for all supported platform: Verify it builds, verify it builds without warnings, verify it passes the testcases.
|
|
|
* Verify the ports still builds against the new source tree.
|
|
|
* Merge to master.
|
|
|
* Push to master.
|
|
|
|
|
|
How Sortix libc cannot be built with a C compiler
|
|
|
--
|
|
|
* Files being named .cpp rather than .c.
|
|
|
* Files not including assert.h to get static_assert.
|
|
|
* Files not including stdalign.h.
|
|
|
* Files not including stdbool.h.
|
|
|
* Files not including stddef.h to get wchar_t.
|
|
|
* Files prefixing extern "C" to functions.
|
|
|
* Files wrapping external variables in extern "C" { }.
|
|
|
* Files including files named .cpp rather than .c
|
|
|
* Files including Sortix kernel headers written in C++ during libk build.
|
|
|
* Files relying on parameter names being omitable.
|
|
|
* Files relying on C++ templates.
|
|
|
* Files relying on unnamed structures and unions for local variables.
|
|
|
* Files relying on if ( type variable = foo ) C++ syntax.
|
|
|
* Files relying on C++ classes.
|
|
|
* Files relying on more relaxed goto rules such as labels before declarations.
|
|
|
|
|
|
Sortix programs that need a rewrite
|
|
|
----
|
|
|
* utils/column.cpp.
|
|
|
* utils/date.cpp needs a proper implementation.
|
|
|
* utils/find.cpp
|
|
|
* utils/install-file.cpp (install(1)) needs a proper implementation.
|
|
|
* utils/kill.cpp
|
|
|
* utils/ln.cpp (there's a few things to improve here)
|
|
|
* utils/ls.cpp
|
|
|
* utils/mv.cpp needs a proper implementation.
|
|
|
* utils/rmdir.cpp
|
|
|
* utils/tail.cpp (or?)
|
|
|
* utils/time.cpp
|
|
|
* utils/kernelinfo.cpp (or do this need to be removed along with the kernel interface?)
|
|
|
* utils/help.cpp (or?)
|
|
|
* utils/memstat.cpp (or?)
|
|
|
* utils/type.cpp
|
|
|
* utils/uptime.cpp
|
|
|
* uitls/sh.cpp (you don't want to touch this)
|
|
|
|
|
|
Sortix programs that needs a --version option
|
|
|
----
|
|
|
* utils/mv.cpp
|
|
|
* utils/find.cpp
|
|
|
* utils/date.cpp
|
|
|
* utils/editor.cpp
|
|
|
* utils/kill.cpp
|
|
|
* utils/memstat.cpp
|
|
|
* utils/head.cpp
|
|
|
* utils/mxsh.cpp
|
|
|
* utils/calc.cpp
|
|
|
* utils/time.cpp
|
|
|
* utils/uptime.cpp
|
|
|
|
|
|
Sortix programs that need to be written
|
|
|
----
|
|
|
* chgrp
|
|
|
* chown
|
|
|
* mktemp
|
|
|
* ps (needs /proc)
|
|
|
* readlink
|
|
|
* stat
|
|
|
* tac
|
|
|
* tee
|
|
|
* printf
|
|
|
|
|
|
Ports in progress
|
|
|
----
|
|
|
* libav needs add_cppflags -D_SORTIX_SOURCE -D_POSIX_SOURCE=200809L in configure.
|
|
|
* libogg collides with stdint.h include guard in include/ogg/config_types.h.in.
|
|
|
* libGL doesn't define the proper feature macros and needs DEFINES="$DEFINES -D_SORTIX_SOURCE -D_POSIX_SOURCE=200809L -DHAVE_PTHREAD" in configure.ac and configure.
|
|
|
* libcairo tries to use -flto after an insufficient configure test gives a false positive that it works when it doesn't.
|
|
|
* libxml2 tries to look for python in a non-cross-compile compatible manner and tries a python2.7-config script, disabled with --without-python.
|
|
|
* libglib needs aggressive-porting with networking patches and dns patches.
|
|
|
* libatk cross-compiles cleanly on aggressive-porting (perhaps without?) and depends on libglib.
|
|
|
* libharfbuzz cross-compiles cleanly on aggressive-porting (perhaps without?) and depends on libglib.
|
|
|
* libpango cross-compiles cleanly on aggressive-porting (perhaps without?) and depends on libglib.
|
|
|
* libwayland needs aggressive-porting with epoll and other non-standard patches.
|
|
|
* libatspi appears to require xtst and other x11 things (or perhaps just xkbcommon?) even though X11 isn't strictly required any longer (is preparing for wayland support).
|
|
|
* libgobject-introspection doesn't support cross-compilation and needs python headers for extensions and might not cross-compile the python extensions properly. Also something about interface generation tools used for build being cross-compiled and some nasty shared library dlopening.
|
|
|
|
|
|
Stuff to rant about in doc/obsolete-stuff
|
|
|
----
|
|
|
* readdir_r being silly.
|
|
|
* wchar conversion functions that kept getting better replacements
|
|
|
* struct utimbuf
|
|
|
* itimers (replaced by POSIX timers)
|
|
|
* other temporary file functions
|
|
|
* more sys/time.h stuff
|
|
|
* ioctl
|
|
|
* networking endian functions (replaced by endian.h)
|
|
|
* strings.h
|
|
|
* libgen (basename, dirname) (because people disagree!)
|
|
|
* (whatever sys/select.h replaced)
|
|
|
* FILENAME_MAX and other PATH_MAX-like macros.
|
|
|
* `inet_addr` (replaced by `inet_aton` or `inet_pton`)
|
|
|
* `inet_ntoa` (replaced by `inet_neta` or `inet_ntop`)
|
|
|
|
|
|
Stuff to do something about
|
|
|
----
|
|
|
* diff(1) and patch(1) not preserving the execute bit for new files.
|
|
|
|
|
|
Roadmap to 0.8 release
|
|
|
----
|
|
|
* Rebase various other branches on `release`: aggressive-porting, ahci, chmod, gears, gui, ihda, malloc, memio, more-documentation, pthread, radeon, signal, socket, tty, video-player.
|
|
|
* Merge `release` into `master`.
|
|
|
* Tag `sortix-0.8`.
|
|
|
* Use git clean -dnx to ensure the git tree is clean!
|
|
|
* Tar up sortix-0.8.tar.xz.
|
|
|
* Tar up sortix-0.8-full.tar.xz.
|
|
|
* Build official release builds from sortix-0.8-full.tar.xz.
|
|
|
* Test official builds.
|
|
|
* Test official builds on all the available real hardware.
|
|
|
* Publish the merged `master` and `sortix-0.8` and publish official builds.
|
|
|
* Update current release symbolic link.
|
|
|
* Update documentation using symbolic links on fh.cs.au.dk and on sortix.org.
|
|
|
* Update website to point to new builds.
|
|
|
* Possibly delete tag `sortix-0.8-rc1` and builds.
|
|
|
* Possibly delete tag `sortix-0.8-rc2` and builds.
|
|
|
* Snapshot website on the wayback machine.
|
|
|
* Announce Sortix 0.8.
|
|
|
* Profit.
|
|
|
* Restore nightly build service (rebuild everything).
|
|
|
* Update my easy build system.
|
|
|
* Update osdev wiki project page. |
|
|
\ No newline at end of file |