toaruos/docs/todo.md
2014-03-20 23:45:20 -07:00

7.7 KiB

Compositor functionality

  • Alt+Tab keyboard window switching (with previews)
  • Advertise window titles + icons
  • New panel with window list
  • Rewrite client-server protocol
    • New resize handshake
    • Only sane event path; fix window creation (fix "wait for reply" commands)
    • Better packet structs for events (window.left? ew!)

Japanese / i18n updates

  • IME
  • Support for multibyte/wide characters in rline and terminal linebuffer
  • JIS keyboard mapping in the compositor (config file???)
    • Applications shouldn't care.
    • What to do with with special characters?

Multiarch / Ports

  • Split out x86 / PC-specific bits into new arch/ directories
  • Fix up uses of explicitly sized types where possible
  • x86-64 port
    • Good for verification of multi-arch readiness
    • Much easier to develop for than ARM port
  • ARMv6 port is underway

Cleanup and POSIX expansion

  • Rewrite underlying process model
    • task/process split should match architecture dependency split
    • Better allocation management, process tracking
    • Cleanup is a pain right now - we need to stop eating processes that finish with parents that might want their statuses.
    • Sleeping, wait queues, and IO polling/select depend on some rewriting

New EXT2 drivers

  • The EXT2 drivers are poorly written, they need a complete rewrite
  • Allow for multiple EXT2 instances
  • Operate on block devices rather than directly with ATA drives
    • Allows for effortless ramdisk implementation with same code
    • Will make MMC port a lot easier for RPi

TODO as of November, 2012

  • force a build run

  • Integrate Cairo into build toolchain

    • autogen means extra effort needed
    • required to ship with new compositor
    • this has been done for a while
  • Fix static initializers in C++

    • The best method for this is probably going to be writing a dynamic loader, so...
    • this has been done for a while
  • Write a dynamic loader

    • as of March 2014, finally starting to work on this
  • Pretty much everything below

TODO for 0.4.0 Distribution Release

  • User Interface
    • Graphical Login
    • More applications
  • Working boot on real hardware
    • Confirmed working on Mini 9 with hard disk boot

TODO for 0.5.0

  • CD support
    • Boot from "CD"
    • Distribute with Grub
    • CD image generator in-repo
  • Stable Harddisk writes
    • Screenshot functionality
    • Attempt an installer?
    • ATA writes in general seem to be stable, work on EXT2 FS write support

Doc Revamp

  • Get rid of old, outdated TeX/PDF manual
  • Build a modern doxygen-powered documentation system for kernel functions for use by kernel developers.
    • Tried to do this, doxygen got very angry - might look at it again later?
  • Also include doxygen documentation for included libraries (lib/graphics, etc.)

TODO for Microkernel Launch (0.5.0?)

  • Replace ramdisks with ELF service executables
    • Boot with multiple modules = boot with multiple services.
    • vfs.srv, for example
    • replace "services" with "modules" and this is done...
  • VFS as a service.
    • It would be super awesome to write this in a language that is more flexible.
    • Actual file system drivers as separate modules, or what?
  • Service bindings
    • Essentially, a system call interface to discovering available services.
    • require_service(...) system call for usable errors when a service is missing?
      • Do module dependencies count? That's in...
  • Deprecate old graphics applications
    • And rename the windowed versions.
  • Environment variables
    • Support them in general
    • Push things like graphics parameters to environment variables
  • Integrate service-based VFS into C library
    • Which probably means integrating shmem services into the C library
  • Services in a separate ring
    • Compositor as a service
    • Compositor shmem names integrated with service discovery
  • For VFS, need better IPC for cross-process read/write/info/readdir/etc. calls

Service Modules (aka "Services")

  • vfs.srv The virtual file system server. (required to provide file system endpoints)
    • Keeping as core for now, possibly a module in the new revision? VFS is kinda important...
  • ext2.srv Ext2 file system server. (provides /)
    • module
  • ata.srv ATA disk access server. (provides /dev/hd*)
    • module
  • compositor.srv The window compositing server. (provides shmem regions)
    • staying in userspace
  • ps2_hid.srv The keyboard/mouse server. (provides /dev/input/ps2/*)
    • two modules: ps2kbd and ps2mouse, and they provide /dev/kbd and /dev/mouse respectively.
    • I'll look into the other dev nodes later...
  • serial.srv UART serial communication server (provides /dev/ttyS*)
    • module: serial

Future Servers

  • usb.srv Generic USB device server (provides /dev/input/usb/*)
  • proc.srv Process information server (provides /dev/proc; uses lots of kernel bindings)
  • net.srv Networking server (provides /dev/net)
  • gfx.srv Block-access graphics server (provides /dev/fb*)
    • This is a module at the moment; might be abandoning a lot of these service ideas...

Things that are not services

  • ELF support is not a service

TODO as of Septemember 2012

C++

  • Build with C++ support

Terminal Fixes

  • Mouse features; mouse support in windowed mode
  • Tab completion in shell (this is mostly a shell-specific thing)

Windowing System

  • Graphical Login Manager
  • Finish GUI toolkit
  • File manager app

Harddisk Drive Extras

  • VFS support is still almost entirely non-existent
    • VFS works pretty nicely.
  • Write support for EXT2 is still sketchy
    • This is still true as of March 2014 - actually, it's worse, write support is temporarily gone
  • Still lacking fast read/write for IDE - needs more DMA!
    • Still true in 2014

Toolchain

  • Finish GCC port
    • Finished in April/May, 2013
  • Port ncurses/vim/etc.
    • This was compleated circa March 2013
    • Native development requires good tools.
    • Also port genext2fs.
  • Directory support needs to be better integrated into the C library still
    • readdir and family have been integrated

Microkernal Readiness

  • Deprecate ramdisks replaced with new ramdisk module, works better
    • Haven't used them in development in over a year
    • Not useful anywhere else due to their limiting sizes
    • As of March 2014, ramdisks have been reimplemented (again) in an actual ramdisk module
  • implement module execution
    • Instead of loading a ramdisk, modules should be standard binaries
      • Actually, both are supported now, so that's done.
    • The binaries will be executed in a new "service mode"
      • This was isn't going to happen, at least not for kernel modules.
  • Implement "servicespace"
    • Userspace, but at a different ring
    • Special access features, like extended port access
    • Higher priority scheduling

Services to Implement

  • PCI Service
  • Graphics Management Service
  • Compositor as a service?
    • Technically, it already is.
  • Virtual File System Service

Old I/O goals

I/O

  • /dev file system
  • /dev/fbN and /dev/ttyN for virtual framebuffer terminals and graphics
    • Framebuffers still need work to actually support mapping, but can provide size/address information via ioctl.
  • /dev/ttyS0 for serial I/O
  • SATA read/write drivers (/dev/sdaN)
  • /dev/ramdisk (read-only)
    • Actually in /dev/ramN now
  • EXT2 drivers should operate on a /dev/* file
    • Working on this with new ext2 drivers
      • The new driver is in the current strawberry head
    • Need better block device handling; *64() operations
      • Handled in the block device by doing extra reads, read-before-write operations
  • Mounting of /dev/* files using a filesystem handler
    • A workaround is provided for /dev so that mounted nodes can be listed
    • A general solution is being worked on in the new VFS
  • VFS tree