feat: openkal 0.3.0, implementations for Linux and macOS, and a C library above it - #222
Merged
Conversation
… library
The specification now covers eight interfaces rather than three. The five added
are derived from resource kinds, and each carries the evidence that it was
derived rather than borrowed.
* openkal.fs is relative to a directory throughout and has no global namespace
of paths, because a global namespace is unavailable on a capability-based
kernel and an implementation upon one would have to construct it.
* openkal.process starts a program rather than duplicating the caller, because
duplication cannot be performed faithfully on every environment. A large
portable program corroborates the choice: it spawns and calls neither of the
duplicating operations.
* openkal.task exposes the primitive that suspends a context upon a word.
Mutexes and condition variables are constructions above it, which is
observable in any C library that implements them.
Two implementations are registered rather than one, and the second is what turns
the specification from a description of one system into a portable one. Four
divergences are recorded in it, and each is a place where an interface could
have assumed a mechanism: the monotonic clock continues during suspension where
the other stops, names are compared without regard to case, the spawn has no
attribute setting the working directory, and there is no suspension primitive a
program may use.
openkal-libc tests the claim the specification makes. It performs the two
adaptations the specification deliberately places outside itself — resolving a
global name against the supplied directories, and constructing synchronisation
objects from the suspension primitive — and an ordinary program above it reads a
file by global path, consults a variable, measures an interval and starts
another program without containing any of that.
Earlier versions of the two openkal packages are replaced rather than retained:
a specification whose clauses have changed is a different specification, and two
of them under one name would be worse than the absence of the earlier.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The specification now covers eight interfaces rather than three. The five added
are derived from resource kinds, and each carries the evidence that it was
derived rather than borrowed.
of paths, because a global namespace is unavailable on a capability-based
kernel and an implementation upon one would have to construct it.
duplication cannot be performed faithfully on every environment. A large
portable program corroborates the choice: it spawns and calls neither of the
duplicating operations.
Mutexes and condition variables are constructions above it, which is
observable in any C library that implements them.
Two implementations are registered rather than one, and the second is what turns
the specification from a description of one system into a portable one. Four
divergences are recorded in it, and each is a place where an interface could
have assumed a mechanism: the monotonic clock continues during suspension where
the other stops, names are compared without regard to case, the spawn has no
attribute setting the working directory, and there is no suspension primitive a
program may use.
openkal-libc tests the claim the specification makes. It performs the two
adaptations the specification deliberately places outside itself — resolving a
global name against the supplied directories, and constructing synchronisation
objects from the suspension primitive — and an ordinary program above it reads a
file by global path, consults a variable, measures an interval and starts
another program without containing any of that.
Earlier versions of the two openkal packages are replaced rather than retained:
a specification whose clauses have changed is a different specification, and two
of them under one name would be worse than the absence of the earlier.