Repository navigation
Releases
MorrowOS v1.3
Automated build. BIOS + UEFI, 64-bit.
Boot splash: stock (the branding step fell back — see the run log).
Boot menu: MorrowOS Dawn theme.
Installer: installs to disk as MorrowOS.
SHA256 of the assembled ISO:
fcd8265d02ae96e3ca77f3472463f89eddcc222be31e878fbfa58217d1b58f7c morrowos-v1.3.iso
The ISO exceeds GitHub's 2 GiB per-asset limit, so it is
published as numbered parts. Download every .part* file
into one folder, then reassemble:
Linux / macOS
cat morrowos-v1.3.iso.part* > morrowos-v1.3.iso
sha256sum -c morrowos-v1.3.iso.sha256Windows — simplest (Command Prompt, in the folder with the parts)
copy /b morrowos-v1.3.iso.part00 + morrowos-v1.3.iso.part01 + morrowos-v1.3.iso.part02 morrowos-v1.3.iso
Then check it in PowerShell:
(Get-FileHash "morrowos-v1.3.iso" -Algorithm SHA256).Hash.ToLower()Windows — PowerShell alternative
Three things here are deliberate and were each a real bug:
Join-Path $PWD.Path because .NET APIs resolve relative paths
against the process working directory, NOT PowerShell's location;
File::Create rather than OpenWrite because OpenWrite does not
truncate, so re-running over an existing file leaves trailing bytes
and a wrong hash; and CopyTo rather than ReadAllBytes because
a 1900 MiB part read whole sits right at the ~2 GB .NET array limit.
$dir = $PWD.Path
$iso = Join-Path $dir "morrowos-v1.3.iso"
$out = [System.IO.File]::Create($iso)
Get-ChildItem (Join-Path $dir "morrowos-v1.3.iso.part*") | Sort-Object Name | ForEach-Object {
$in = [System.IO.File]::OpenRead($_.FullName)
$in.CopyTo($out)
$in.Close()
}
$out.Close()
(Get-FileHash $iso -Algorithm SHA256).Hash.ToLower()Compare that hash against the one above before booting it.
See the README for the full change list and known gaps.
MorrowOS v1.2
Automated build. BIOS + UEFI, 64-bit.
SHA256 of the assembled ISO:
ccf217db517225faffba7981267bd9dfbf46b725f0fdcd417c41f435ce9d7bc1 morrowos-v1.2.iso
The ISO exceeds GitHub's 2 GiB per-asset limit, so it is
published as numbered parts. Download every .part* file
into one folder, then reassemble:
Linux / macOS
cat morrowos-v1.2.iso.part* > morrowos-v1.2.iso
sha256sum -c morrowos-v1.2.iso.sha256Windows (PowerShell)
$iso = Join-Path $dir "morrowos-v1.2.iso"
$parts = Get-ChildItem -Path $dir -Filter "morrowos-v1.2.iso.part*" | Sort-Object Name
if (-not $parts) { throw "No .part files found in $dir" }
$parts | ForEach-Object { "{0} {1:N0} bytes" -f $_.Name, $_.Length }
$out = [System.IO.File]::Create($iso)
foreach ($p in $parts) {
$in = [System.IO.File]::OpenRead($p.FullName)
$in.CopyTo($out)
$in.Close()
}
$out.Close()
Get-Item $iso | Select-Object FullName, Length
(Get-FileHash $iso -Algorithm SHA256).Hash.ToLower()
Compare that hash against the one above before booting it.
See the README for the full change list and known gaps.
MorrowOS v1.1
Automated build. BIOS + UEFI, 64-bit.
SHA256 of the assembled ISO:
42df0aa00a207d85921bafbc637e8f36b3632b0b45047d7e89428abff8fe7ae1 morrowos-v1.1.iso
The ISO exceeds GitHub's 2 GiB per-asset limit, so it is
published as numbered parts. Download every .part* file
into one folder, then reassemble:
Linux / macOS
cat morrowos-v1.1.iso.part* > morrowos-v1.1.iso
sha256sum -c morrowos-v1.1.iso.sha256Windows (PowerShell)
$iso = Join-Path $dir "morrowos-v1.1.iso"
$parts = Get-ChildItem -Path $dir -Filter "morrowos-v1.1.iso.part*" | Sort-Object Name
if (-not $parts) { throw "No .part files found in $dir" }
$parts | ForEach-Object { "{0} {1:N0} bytes" -f $_.Name, $_.Length }
$out = [System.IO.File]::Create($iso)
foreach ($p in $parts) {
$in = [System.IO.File]::OpenRead($p.FullName)
$in.CopyTo($out)
$in.Close()
}
$out.Close()
Get-Item $iso | Select-Object FullName, Length
(Get-FileHash $iso -Algorithm SHA256).Hash.ToLower()
Compare that hash against the one above before booting it.
See the README for the full change list and known gaps.
MorrowOS
HavenOS Linux v0.0.2
HavenOS Linux v0.0.2 - Live ISO
Ubuntu 24.04 base, KDE Plasma desktop, casper live-boot.
Boot with: qemu-system-x86_64 -m 3072 -smp 2 -cdrom havenos-linux-v0.0.2.iso -boot d -vga std
Default user: haven / haven