0.5.0 --- openkal 0.10's five operations, four implemented and one recorded - #16
Merged
Conversation
…corded ⭐ THIS SYSTEM EXCLUDES PER HANDLE, WHICH IS WHAT openkal STATES. The other two kernels carry an older record lock held by the PROCESS --- released as soon as that process closes any descriptor for the node --- and have to reach past it to the open-file form. Here there is nothing to reach past: `NtLockFile' is the handle's.⚠️ AND THIS SYSTEM'S EXCLUSION IS MANDATORY RATHER THAN ADVISORY: a write that crosses a locked range is refused by the system, where elsewhere it is refused only to a program that asked. That is a difference a caller can observe and it is the environment's own; simulating the weaker one is not this implementation's to do. `kal_fs_capacity' reports the units this CALLER may use rather than the volume's free total --- a quota makes the two differ, and the larger is not a number a program can act upon. `kal_fs_set_modified_at' does NOT open through `kal_fs_open': that one names `FILE_NON_DIRECTORY_FILE', correctly, since it opens a file --- and a directory is exactly what this declaration exists to reach. It opens for the attribute alone, so a caller need not be able to write the contents to stamp them. `kal_task_parallelism' counts the ACTIVE MASK and not the count field. This record carries both and they differ whenever a program is confined to part of the machine, which is the case a program sizing itself most needs to get right. --- and the one that is not claimed -----------------------------------------⚠️ ⚠️ `kal_process_spawn_bound' IS REFUSED, AND NOT BECAUSE THIS SYSTEM CANNOT. It can: a job object with `JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE' ends every program in the job when the last handle closes, which this system does when a process dies however it dies. That is exactly the binding openkal describes. It is not claimed because it has not been MEASURED here. The one consumer that needs it composes `execve', and this system already declines `openkal.space', so nothing on this system reaches the operation today --- and claiming a binding that has never been exercised is the shape of answer openkal exists to refuse. It is recorded as the next thing this implementation should do rather than as an absence, and a caller that asks `kal_process_props' first is told.
⭐ CAUGHT BY THIS PACKAGE'S OWN CHECK, WHICH EXISTS FOR EXACTLY THIS.
declared in src/*.h and exported by no .def:
NtLockFile
NtUnlockFile
A declaration in `src/win.h' and an entry in `port/*.def' are two statements of
one fact --- what this package imports from the object manager --- and the second
is what an import library is built from. A declaration without the entry compiles
and does not link, and the check turns that into a line naming the two names
rather than a linker message naming a symbol.
⚠️ It is the same shape as the source-exclusion list in the sibling C library:
a second statement of one fact falls behind the first, and the thing that catches
it is a check that compares them.
⚠️ ⚠️ THE TRANSLATION TABLE HAD NO ENTRY FOR A LOCK CONFLICT, because nothing in this implementation took a lock until openkal 0.10. `kal_fs_lock' without KAL_LOCK_WAIT reports `kal_err_again' where the range is held --- that is the answer a caller POLLS UPON, and openkal says so. Without the entry, `ERROR_LOCK_VIOLATION' fell to the default arm and became `kal_err_io': a failure of the DEVICE rather than a conflict with another holder. A caller reading that stops; a caller reading `again' retries. ⭐ IT IS DISTINCT FROM `ERROR_SHARING_VIOLATION', WHICH STAYS `permission'. That one is a conflict over how a file was OPENED and is not resolved by asking again. Two errors that look adjacent and mean opposite things for a caller. Found by the specification's own conformance suite, on the observation added with the operation --- which is the argument for adding the observation with the operation.
⚠️ ⚠️ AN ENVIRONMENT MAY EXPORT A NAME AND NOT IMPLEMENT WHAT IT NAMES. This system locks a byte range, and the three continuous-integration rows that run ON it measure that it does. A fourth row cross-builds and runs the result under an EMULATOR of this system, which exports `NtLockFile' and answers `STATUS_NOT_IMPLEMENTED' when it is called. ⭐ SO THE PROPERTY IS NOT A PROPERTY OF THE VOLUME, NOR OF THE FORMAT. It is a property of what is beneath the program at the moment it asks. A word that claimed the position regardless would be describing the INTERFACE rather than the environment --- and the whole purpose of a capability word is that a caller may ask before it calls and be told the truth about where it is.⚠️ THE ENQUIRY IS MADE ON A DIRECTORY, WHICH IS NOT A THING THIS SYSTEM LOCKS, and that is what makes it answerable without disturbing anything. A system that implements the operation refuses a directory as a wrong request; one that has not implemented it says so with a different value, and that difference is the whole of the question. Nothing is locked either way, and it is asked once. Measured under that emulator, through the C library above: a lock now reports `ENOSYS' --- which is true there --- rather than the suite reporting four observations that did not hold. On the three rows that run on the system itself, nothing changes and the observations hold.
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.
Part of the openkal 0.10 move: mcpplibs/openkal#25.
openkalisthe shared dependency of every package here and a version requirement is exact —
an implementation left at 0.9.0 while a consumer moves to 0.10.0 does not get its
own older contract; the two are irreconcilable and nothing resolves at all.
Branch
declarations-0.10exists in every implementation so the specification'sown cross-repository job builds against this one.
The commit message states what this package does with each of the five new
declarations and why.