L4Re/departure

Annotated docs/wiki/Roadmap

471:c735e5869ff4
23 months ago Paul Boddie Added some more generally useful information.
paul@471 1
= Roadmap =
paul@471 2
paul@471 3
The development of a framework for demand-paged filesystem functionality is a
paul@471 4
potentially open-ended activity. Starting with an initial need to be able to
paul@471 5
read and write files from and to a storage medium, once features such as
paul@471 6
[[Paging|demand paging]] are introduced, the broader activity expands to
paul@471 7
encompass other exercises such as the implementation of a [[Program
paul@471 8
Loading|program loading]] mechanism.
paul@471 9
paul@471 10
Some development priorities can nevertheless be identified. Here are some
paul@471 11
ideas and tentative plans.
paul@471 12
paul@471 13
<<TableOfContents(2,2)>>
paul@471 14
paul@471 15
== Program or Process Server ==
paul@471 16
paul@471 17
The provision of a program server to initiate and monitor program execution
paul@471 18
would do much to support familiar operating system and language environment
paul@471 19
primitives, along the lines of `exec` and `spawn` operations found in similar
paul@471 20
systems.
paul@471 21
paul@471 22
L4Re employs a "parent" interface to monitor program events, with a "signal"
paul@471 23
being sent upon program termination. This signal is sent by the C library
paul@471 24
implementation when the `main` function returns control to the C library. It
paul@471 25
seems worthwhile adopting this approach for compatibility with L4Re.
paul@471 26
paul@471 27
== Library Loading Support ==
paul@471 28
paul@471 29
Currently, the program loading functionality does not support dynamic
paul@471 30
library loading.
paul@471 31
paul@471 32
== Test Sequencing and Shell Functionality ==
paul@471 33
paul@471 34
Currently, testing attempts to validate the behaviour of various operations
paul@471 35
within individual programs, but this involves a fair amount of repetitive
paul@471 36
work. Meanwhile, the `fsaccess` program offers a simple way of performing
paul@471 37
filesystem operations resembling that of a shell, but it does not offer the
paul@471 38
kind of sophisticated shell functionality that would help in assessing whether
paul@471 39
operations behave as expected.
paul@471 40
paul@471 41
If proper program or process monitoring were to be supported, a very simple
paul@471 42
shell could be implemented, this being able to run arbitrary programs instead
paul@471 43
of a small selection of operations. A more natural Unix-like approach could
paul@471 44
then be taken, with tests implemented by individual programs, and with such
paul@471 45
programs being combined to assess test output. To facilitate this, support for
paul@471 46
providing input and output streams to processes would also be required.
paul@471 47
paul@471 48
== C Library Support ==
paul@471 49
paul@471 50
The previous iteration of this general effort introduced a new C library based
paul@471 51
on Newlib that employed the filesystem access framework. It seems likely that
paul@471 52
a similar approach will be taken for this iteration as well.
paul@471 53
paul@471 54
== Virtual Filesystems ==
paul@471 55
paul@471 56
The previous iteration of this work provided a virtual filesystem server that
paul@471 57
could combine different filesystems, permitting them to be mounted into the
paul@471 58
same hierarchy. L4Re seems to attempt this using its namespace concept, but
paul@471 59
this results in a kind of discontinuity between the namespaces hosting the
paul@471 60
filesystem "mountpoints" and the mounted filesystems themselves, at least in
paul@471 61
terms of the metadata supported by the two types of naming hierarchies.
paul@471 62
Namespaces appear to behave only superficially as directories when treated as
paul@471 63
such.
paul@471 64
paul@471 65
One approach might involve replicating a traditional Unix approach, with a
paul@471 66
base filesystem provided by a conventional filesystem implementation, and with
paul@471 67
mounted filesystems residing at mountpoints within that filesystem. This would
paul@471 68
have the benefit of supporting access controls using the metadata in the root
paul@471 69
filesystem. If a block device were provided via the filesystem, then the
paul@471 70
ability to mount it should be restricted according to that device's
paul@471 71
access-related metadata.
paul@471 72
paul@471 73
It should still be possible to complement this approach with a way of binding
paul@471 74
filesystems to arbitrary locations for a given program. This would permit
paul@471 75
programs to access devices or services for which they have access
paul@471 76
independently of any privilege hierarchy defined by the system. For example, a
paul@471 77
program operated by a user may be able to authenticate itself to access a
paul@471 78
remote service, and such authentication and associated privileges would be
paul@471 79
orthogonal to those defined by the local system.
paul@471 80
paul@471 81
== Monitoring Facilities ==
paul@471 82
paul@471 83
It would be useful to be able to monitor various components so as to get an
paul@471 84
idea of their behaviour and how well they perform. A filesystem's registry of
paul@471 85
open files could be exposed through some kind of control interface, as could
paul@471 86
the regions of individual files that are currently held in memory. A process
paul@471 87
or program server could expose its registry of processes similarly.
paul@471 88
paul@471 89
Although it might not necessarily be desirable for some kinds of systems to
paul@471 90
have centralised registries of things like files and processes, exposed
paul@471 91
through the provision of utilities like `lsof` and `ps`, selective access to
paul@471 92
individual registries of information would still be helpful.