Because Dusk OS is designed to mainly be used after civilizational collapse, the idea of having versions for it doesn't make much sense. After all, the only version the operator will ever need is the latest she manages to have before she makes it hers.
With the advent of Usermode Dusk, there's a possibility of using Dusk as an applicative platform that could become a champion for simplicity and efficiency in the disgusting world of modern software. With some dexterity, that could be done without jeopardizing original design goals. That's an interesting prospect.
Targeting git commits is awkward as you're always on a moving target, so for this applicative platform to work, it's better if there's some kind of versioning in Dusk.
This versioning is not what we commonly call "semantic versioning". It's a simple integer version being bumped up at semi regular intervals at moments where things are relatively stable. Something like a release per month sounds good.
There's never a sub-numbered version. If a particular version turns out to have a big bug in it, we simply release a new version quickly.
There is no particular effort to maintain backward compatibility of the API. We don't change it gratuitously, but we don't maintain compatibility layers either. If you look the the history of the project, you'll see that some APIs have been there for longer than others, indicating the likeliness of their future change.
The changelog below isn't meant to be a mirror of the git commit. Minor bug fixing isn't indicated. The goal of this changelog is to facilitate transition of dependent code to a subsequent version. It therefore lists API addition, change and removal.
Each version has a tag (example v42
) in the git repository and a tarball
(signed with PGP) is published on Dusk OS' website.
You might see packages with a preXX
suffixes in them. These are "pre-release"
versions and are used for development purposes. You shouldn't depend on them or,
if you do, do it with the understanding that these packages will be removed
shortly after the real release.
bitflag
.asm/halo
: Introducing the HAL Overdriveto&
to|
and to^
as well as their companion and!
or!
and xor!
.move
--> cmove
fill
--> cfill
[]=
--> c[]=
callback
struct with a interopzone
struct which lives in
Dusk's memory space.main()
control to Dusk packages, giving them much more
flexibility.common_main()
has been split in two: common_setup()
and common_exec()
.cbfuncs
slots.StdIO
struct to common API.ll>data
.cells/
.s>>,
operator.*,
is now guaranteed to preserve the S register.CDecl
(now
CType
and Symbol
) structure. Regressions might pop up here and there,
but otherwise it's a drop-in replacement.fread()
and fwrite()
to target IO :read
and
IO :write
rather than IO :read#
and IO :write#
. In effect, it
transforms their void
return type into int
and they don't abort
anymore on partial read/write.#const
, #forth
and #include
pre-processor directives.calias
with #calias
, #calias16
, #calias8
and #caliasns
.uint allot(uint n)
uint allot0(uint n)
void memcpy(void *dst, void* src, uint n)
c
, lastws
is LF
instead of 0
.asm/halo
into a more aptly named unit.lib/exec
: new unitsprintf
.log2mod
.startswith?
and endswith?
.lib/tree
: remove/mem
: new top level directory, with these units moved to it:lib/alloc
lib/arena
lib/array
lib/dict
lib/here
lib/ll
lib/malloc
lib/scratch
lib/stack
Allocator :allot0
posix/fd
DataIO
into a parametrizable FDIO
and create a new stdio
structbind that wraps FDs 0 and 1.-1
) return values from fdread
and
fdwrite
to zero.Path :exec<
and exec<<
.:read
and :write
. To keep previous
semantics, those changes have to be made::read
--> :read#
:write
--> :write#
stdio
structbind in favor of the one now included
in posix/fd
(which usermode already includes).wantstofreeze
global variable in common.h
.ABORTPTR
hook to bye
by default. This doesn't affect interactive
mode, which uses sys/rdln
which rehooks ABORTPTR
.showprogress
and ?progress>
.mcrr)
.#immediate
!#if/#else/#endif
directives.strequal()
and assert()
.pspush()
and pspop()
into stdlib.nbelem()
.DSTYPE/DPRINTF/DCPRINTF
macros.n>tok
.%-
argument placeholder type.log2#
, roundpow2
, sex8
and sex16
./lib/math.h
to expose some words to C.:alignto
, allowing allocators to align to something else
than 4 bytes.INSZ
cell into insz
value and add inptr
@value to INPTR
.in<
and word
.fstructbind
signature from ( "structname" "bindname" -- )
to
( "fieldname" "structname" "bindname" -- )
.ARCH
into an integer constant described in doc/kernel
.alignhere
from xcomp/boot
to kernels.popexit,
.branch! ( tgt br -- )
to branch! ( br tgt -- )
.fs/fatlo
, which disappears.newFAT
and related words to the new fs/fatt
.rgb888>rgb565 ( n -- n )
.blt
, bltfill
and bltpixel
into proper methods.lib/drivelo
: merge contents with sys/file
.File
.Filesystem :iter
with a simpler Filesystem :children
.Path :iter
with Path :children
.Path :bi
.doc/sys/kbd
.sys/ps2
: move to drv/ps2 and have it follow the new sys/kbd
API.wasm
: Remove and put in its own repositoryxcomp/boot
: Move IO
struct to sys/io
and File
, Filesystem
and
FSInfo
to sys/file
. xcomp/boot
is now IO-less and FS-less.consts ( n -- )
.PSSZ
sysvar and have stack?
check for PS overflow.HEREMAX
out of SYSVARS
and into a regular cell in xcomp/boot
.scnt
and rcnt
from lib/diag
to xcomp/boot
.doc/usage/flow
."<
litrepl
and litrepl?
with str<
.S"
to "
and ,S"
to ,str"
.wordorquote
.STR_MAXSZ
and strmove
from lib/str
to xcomp/boot
.MAXWORDSZ
with STR_MAXSZ
."
) and mustache
({
) in word parsing logic. This means, for example, that the string
literal previously constructed as " foobar"
is now constructed as
"foobar"
. This also means that the '"'
and '{'
character literals
become invalid. Use DQUOT
or MOUSTACHE
instead. Details in
doc/usage/io
. fieldle
and fieldbe
. Use ad-hoc words instead.fstructbind
--> bind{}
ifz,
and ifnz,
macros.Usbdev --> IDev
Ep --> IEp
KEp --> Ep
Dev.usb --> Dev.info
fatops
structbind with FatOpts
namespace containing
moustache fields.lib/exec
: move contents to xcomp/boot
.wordorquote
for argument parsing.macro"
to macro
.roundpow2 ( n pow -- n )
by the more general
roundup ( n div -- n )
. rounddown ( n div -- n )
.abs ( n -- n )
.ps[] ( ... n -- ... a u )
ndrop ( ... n -- )
Drive
struct.bounds[] ( a u -- lo hi )
.intersect[]
to cintersect[]
without changing semantics.swap[] ( a u -- )
.wordtbl
, :w
and 'w
semantics with wordtbl[
, ]wordtbl
and
:>
.lookuptbl[
, ]lookuptbl
and ?lexec
.Path
struct.Filesystem finddir
and Filesystem :exec<
.f<<
and ?f<<
on Filesystem :exec<
thus allowing dependency
declarations in units to use relative paths.Drive
struct from xcomp/boot
to here.FSInfo
and change FileSystem :info
semantics.SumIO
and SerialIO
.MemIO
implement IO :resize
, with caveats (see docs).:melt ( nkc self -- nkc )