VOGONS


Reply 40 of 51, by gsos

User metadata
Rank Newbie
Rank
Newbie
LSS10999 wrote on 2026-08-20, 08:50:

I'd like to see more useful screenshots as well as prebuilt release binaries/images in the future. Currently I'm looking at how to set up a proper build environment to experiment with it.

My targets would be mostly baremetal hardware, preferably installed on hard disk though I'd be doing initial tests using bootable USB sticks. Regarding emulated (not natively present) functionalities (video, sound, etc.) I wonder where I should look at in order to configure them?

And regarding the license, it's not recognized by GitHub (showing it as just "License"), but it appears to be WTFPL with the "NO WARRANTY" disclaimer taken from MIT added under it.

Yes I should invest some time into setting up a convenient flow. Building should be easy, the ./run.sh script should work basically out of the box (downloading bazelisk automatic). bazel-out/kernel.elf is the kernel, but you need a ext4 filesystem present.

The way I have it, I have linux running on my laptop. I build kernel.elf and copy it into /boot/retroos and add grub menu for it and /home/retroos is prepared to have BOOT/... (command.com, dn, config.sys) ULTRASND/ for midi patches, CD/ and FLOPPY/ contain any images (iso,cue, img) and then my games, borlandc etc..

So /home/retroos

drwxrwsr-x 3 priv-gerben retroos 4096 Aug 19 21:09 BOOT
lrwxrwxrwx 1 priv-gerben retroos 59 Aug 19 21:09 BORLANDC -> /home/priv-gerben/project/RetroOS/apps-proprietary/BORLANDC
lrwxrwxrwx 1 priv-gerben retroos 53 Aug 19 21:09 BP -> /home/priv-gerben/project/RetroOS/apps-proprietary/BP
lrwxrwxrwx 1 priv-gerben retroos 53 Aug 14 20:01 CD -> /home/priv-gerben/project/RetroOS/apps-proprietary/CD
lrwxrwxrwx 1 priv-gerben retroos 57 Aug 14 20:01 FLOPPY -> /home/priv-gerben/project/RetroOS/apps-proprietary/FLOPPY
drwxrwsr-x 2 priv-gerben retroos 4096 Aug 19 21:09 GAMES
drwxrwsr-x 4 priv-gerben retroos 4096 Aug 19 21:04 OS2
lrwxrwxrwx 1 priv-gerben retroos 47 Aug 19 21:09 ULTRASND -> /home/priv-gerben/project/RetroOS/apps/ultrasnd
drwxrwsr-x 4 priv-gerben retroos 4096 Aug 19 21:56 WINDOWS

I added initial OS2/WINDOWS support last evening, that's why those directories are there.

Then /home/retroos/BOOT

drwxrwsr-x 3 priv-gerben retroos   4096 Aug 19 21:09 .
drwxrwsr-x 8 priv-gerben retroos 4096 Aug 19 21:56 ..
-r-xrwxr-x 1 priv-gerben retroos 24144 Aug 19 21:09 COMMAND.COM
drwxrwsr-x 2 priv-gerben retroos 4096 Aug 19 21:09 DN
-r-xrwxr-x 1 priv-gerben retroos 437024 Aug 19 21:09 KERNEL.SYM
-r-xrwxr-x 1 priv-gerben retroos 2861 Aug 19 21:09 LOADFIX.CFG
-r-xrwxr-x 1 priv-gerben retroos 3428 Aug 19 21:09 SHELL.ELF

My /etc/grub.d/40_custom

cat /etc/grub.d/40_custom 
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry "RetroOS (protected disk)" {
insmod part_gpt
insmod ext2
insmod multiboot
insmod efi_gop
set gfxmode=auto
set gfxpayload=keep
search --no-floppy --file /boot/retroos/kernel.elf --set=root
multiboot /boot/retroos/kernel.elf ram-overlay
boot
}

menuentry "RetroOS (writeable disk)" {
insmod part_gpt
insmod ext2
insmod multiboot
insmod efi_gop
set gfxmode=auto
set gfxpayload=keep
search --no-floppy --file /boot/retroos/kernel.elf --set=root
multiboot /boot/retroos/kernel.elf
boot
}

I recommend to start with the ram-overlay which causes disk writes to only affect the ram-overlay and not modify the hard disk. Maybe @inagy can tell in detail his setup, but he is booting from his raspberry pi.

Reply 41 of 51, by LSS10999

User metadata
Rank Oldbie
Rank
Oldbie

Tried building but not successful. I'm using the commands you mentioned in the "Build" section of README.md instead of the run.sh which I suppose is more for running compiled targets...

My host is Arch Linux based. Currently I'm using rustup and bazelisk packages from pacman.

Here's the build output with "--verbose_failures" added to bazelisk arguments regarding the error.

INFO: Analyzed target //:image (90 packages loaded, 5933 targets configured).
ERROR: /data/RetroOS/kernel/BUILD.bazel:171:12: Compiling Rust bin retroos-host (1 file) [for tool] failed: (Exit 1): process_wrapper failed: error executing Rustc command (from target //kernel:retroos-host)
(cd /home/user/.cache/bazel/_bazel_user/a7f4c046dc473b410a4dd4e0a0b103ef/sandbox/linux-sandbox/515/execroot/_main && \
exec env - \
CARGO_CFG_TARGET_ARCH=x86_64 \
CARGO_CFG_TARGET_OS=linux \
CARGO_CRATE_NAME=retroos_host \
CARGO_MANIFEST_DIR='${pwd}/kernel' \
CARGO_PKG_AUTHORS='' \
CARGO_PKG_DESCRIPTION='' \
CARGO_PKG_HOMEPAGE='' \
CARGO_PKG_NAME=retroos-host \
CARGO_PKG_VERSION=0.0.0 \
CARGO_PKG_VERSION_MAJOR=0 \
CARGO_PKG_VERSION_MINOR=0 \
CARGO_PKG_VERSION_PATCH=0 \
CARGO_PKG_VERSION_PRE='' \
LD_LIBRARY_PATH='' \
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
REPOSITORY_NAME='' \
ZERO_AR_DATE=1 \
bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~/util/process_wrapper/process_wrapper --arg-file bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__libc-0.2.186/_bs.linksearchpaths --subst 'pwd=${pwd}' --subst 'exec_root=${exec_root}' --subst 'output_base=${output_base}' -- bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~rust~rust_linux_x86_64__x86_64-unknown-linux-gnu__nightly_tools/rust_toolchain/bin/rustc kernel/src/main.rs '--crate-name=retroos_host' '--crate-type=bin' '--error-format=human' '--out-dir=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/kernel' '--codegen=opt-level=3' '--codegen=debuginfo=0' '--codegen=strip=debuginfo' '--remap-path-prefix=${pwd}=.' '--remap-path-prefix=${exec_root}=.' '--remap-path-prefix=${output_base}=.' '--emit=link=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/kernel/retroos-host' '--emit=dep-info' '--color=always' '--target=x86_64-unknown-linux-gnu' -L bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~rust~rust_linux_x86_64__x86_64-unknown-linux-gnu__nightly_tools/rust_toolchain/lib/rustlib/x86_64-unknown-linux-gnu/lib '--edition=2024' '-Cembed-bitcode=no' '--codegen=linker=/usr/sbin/gcc' '--codegen=link-arg=-fuse-ld=lld' '--codegen=link-arg=-B/usr/sbin' '--codegen=link-arg=-Wl,-no-as-needed' '--codegen=link-arg=-Wl,-z,relro,-z,now' '--codegen=link-arg=-pass-exit-codes' '--codegen=link-arg=-Wl,--gc-sections' '--codegen=link-arg=-Wl,--push-state,-as-needed' '--codegen=link-arg=-lstdc++' '--codegen=link-arg=-Wl,--pop-state' '--codegen=link-arg=-Wl,--push-state,-as-needed' '--codegen=link-arg=-lm' '--codegen=link-arg=-Wl,--pop-state' '-Lnative=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/third_party/unicorn/unicorn/lib' '-Lnative=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/_main~_repo_rules~lwext4' '-lstatic=unicorn' '-Clink-arg=-lunicorn' '-lstatic=lwext4_host' '-Clink-arg=-llwext4_host' '--extern=kernel=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/kernel/libkernel-345816794.rlib' '--extern=retroos_arch_interp=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/arch-interp/libretroos_arch_interp-391651502.rlib' '--extern=lib=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/lib/liblib-386233736.rlib' '--extern=vga=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/lib/libvga-505772366.rlib' '--extern=sound=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/lib/libsound-542287918.rlib' '--extern=lwext4=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/third_party/lwext4/liblwext4-861921465.rlib' '--extern=lwext4_sys=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/third_party/lwext4/liblwext4_sys-731513127.rlib' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/klog' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/lib' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/_main~_repo_rules~nuked_opl3' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/third_party/lwext4' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__bytemuck_derive-1.12.0' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__bytemuck-1.25.2' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__cfg-if-1.0.4' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__embedded-io-0.7.1' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__zerocopy-derive-0.8.56' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__hadris-fixed-2.0.0' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__hadris-io-2.0.0' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__hadris-path-2.0.0' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__noalloc-0.0.1' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__zerocopy-0.8.56' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__endian-num-0.2.0' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__hadris-macros-2.0.0' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__scopeguard-1.2.0' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__lock_api-0.4.14' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__bitflags-2.13.0' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__hadris-common-2.0.0' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__hadris-part-2.0.0' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__spin-0.12.2' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/_main~_repo_rules~bitflags' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/_main~_repo_rules~log' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/arch-abi' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/third_party/voodoo' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__hadris-iso-2.0.0' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/_main~_repo_rules~fatfs' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__rustc-demangle-0.1.27' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__unicorn-engine-sys-2.1.5' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__libc-0.2.186' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__unicorn-engine-2.1.5' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/kernel' '-Ldependency=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/arch-interp' '--sysroot=bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~rust~rust_linux_x86_64__x86_64-unknown-linux-gnu__nightly_tools/rust_toolchain' '-Cpanic=abort' '-Crelocation-model=static')
# Configuration: 9750c3709d99419e4c56edd72750e9f13bcc9895c954ae6e73a969df2f902206
# Execution platform: @@platforms//host:host

Use --sandbox_debug to see verbose messages from the sandbox and retain the sandbox build root for debugging
error: linking with `/usr/sbin/gcc` failed: exit status: 1
|
= note: "/usr/sbin/gcc" "-m64" "/home/user/.cache/bazel/_bazel_user/a7f4c046dc473b410a4dd4e0a0b103ef/sandbox/linux-sandbox/515/execroot/_main/bazel-out/k8-opt-exec-ST-d57f47055a04/bin/kernel/rustcrQE2HF/symbols.o" "<17 object files omitted>" "-Wl,--as-needed" "-Wl,-Bstatic" "-lunicorn" "-llwext4_host" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_abort-*.rlib" "/home/user/.cache/bazel/_bazel_user/a7f4c046dc473b410a4dd4e0a0b103ef/execroot/_main/bazel-out/k8-opt-exec-ST-d57f47055a04/bin/kernel/libkernel-345816794.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/_main~_repo_rules~fatfs/libfatfs-1269675949.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/_main~_repo_rules~bitflags/libbitflags-2296606973.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/_main~_repo_rules~log/liblog-192684875.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/third_party/lwext4/liblwext4-861921465.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/third_party/voodoo/libvoodoo-409010663.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/third_party/lwext4/liblwext4_sys-731513127.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__hadris-iso-2.0.0/libhadris_iso-1173291256.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__bitflags-2.13.0/libbitflags-426805593.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__hadris-io-2.0.0/libhadris_io-3428972955.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__embedded-io-0.7.1/libembedded_io-400402238.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__hadris-common-2.0.0/libhadris_common-1965804352.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__hadris-path-2.0.0/libhadris_path-1453752966.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__zerocopy-0.8.56/libzerocopy-239233032.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__noalloc-0.0.1/libnoalloc-1333964645.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__hadris-fixed-2.0.0/libhadris_fixed-778759671.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__bytemuck-1.25.2/libbytemuck-3676478283.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/lib/libsound-542287918.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/_main~_repo_rules~nuked_opl3/libnuked_opl3-1202259879.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__spin-0.12.2/libspin-16997579.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__lock_api-0.4.14/liblock_api-1800404391.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__scopeguard-1.2.0/libscopeguard-2096412608.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/lib/{libvga-505772366,liblib-386233736}.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/klog/libklog-1506101342.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__rustc-demangle-0.1.27/librustc_demangle-1873733380.rlib" "/home/user/.cache/bazel/_bazel_user/a7f4c046dc473b410a4dd4e0a0b103ef/execroot/_main/bazel-out/k8-opt-exec-ST-d57f47055a04/bin/arch-interp/libretroos_arch_interp-391651502.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__libc-0.2.186/liblibc-4078536105.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__unicorn-engine-2.1.5/libunicorn_engine-323025378.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~crate~crates__unicorn-engine-sys-2.1.5/libunicorn_engine_sys-616523268.rlib" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/arch-abi/libarch_abi-79344026.rlib" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib/{libstd-*,libobject-*,libmemchr-*,libaddr2line-*,libgimli-*,libcfg_if-*,librustc_demangle-*,libstd_detect-*,libhashbrown-*,librustc_std_workspace_alloc-*,libminiz_oxide-*,libadler2-*,libunwind-*,liblibc-*,librustc_std_workspace_core-*,liballoc-*,libcore-*,libcompiler_builtins-*}.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-L" "/home/user/.cache/bazel/_bazel_user/a7f4c046dc473b410a4dd4e0a0b103ef/sandbox/linux-sandbox/515/execroot/_main/bazel-out/k8-opt-exec-ST-d57f47055a04/bin/kernel/rustcrQE2HF/raw-dylibs" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-L" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-L" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/third_party/unicorn/unicorn/lib" "-L" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/_main~_repo_rules~lwext4" "-L" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "bazel-out/k8-opt-exec-ST-d57f47055a04/bin/kernel/retroos-host" "-Wl,--gc-sections" "-no-pie" "-Wl,-z,relro,-z,now" "-Wl,-O1" "-Wl,--strip-debug" "-nodefaultlibs" "-fuse-ld=lld" "-B/usr/sbin" "-Wl,-no-as-needed" "-Wl,-z,relro,-z,now" "-pass-exit-codes" "-Wl,--gc-sections" "-Wl,--push-state,-as-needed" "-lstdc++" "-Wl,--pop-state" "-Wl,--push-state,-as-needed" "-lm" "-Wl,--pop-state" "-lunicorn" "-llwext4_host"
= note: some arguments are omitted. use `--verbose` to show all linker arguments
= note: ld.lld: error: undefined symbol: __atomic_compare_exchange_16
>>> referenced by cputlb.c
>>> cputlb.c.o:(helper_atomic_cmpxchgo_le_mmu_x86_64) in archive bazel-out/k8-opt-exec-ST-d57f47055a04/bin/third_party/unicorn/unicorn/lib/libunicorn.a
collect2: error: ld returned 1 exit status


error: aborting due to 1 previous error

Target //:image failed to build
INFO: Elapsed time: 2.741s, Critical Path: 1.13s
INFO: 2 processes: 2 internal.
ERROR: Build did NOT complete successfully

BTW: Before this error I had another set of errors including this following one, which went away after adding "--repo_env=BAZEL_CONLYOPTS="-std=gnu17"" into bazelisk args according to this comment. Perhaps toolchains from Arch Linux is too new for the purpose requiring some additional efforts to make workflows compatible.

goption.c:169:14: error: two or more data types in declaration specifiers
169 | gboolean bool;
| ^~~~
goption.c:169:18: warning: declaration does not declare anything
169 | gboolean bool;
| ^
goption.c: In function 'free_changes_list':
goption.c:1603:60: error: expected identifier before 'bool'
1603 | *(gboolean *)change->arg_data = change->prev.bool;

Reply 42 of 51, by gsos

User metadata
Rank Newbie
Rank
Newbie

Hmm thanks for the report, maybe try "bazelisk build //:image --host_linkopt=-latomic " .

Reply 43 of 51, by LSS10999

User metadata
Rank Oldbie
Rank
Oldbie
gsos wrote on 2026-08-20, 16:11:

Hmm thanks for the report, maybe try "bazelisk build //:image --host_linkopt=-latomic " .

Thanks. Build process went through. However, it seems there's something not right with the finalization part, ending with errors.

Regarding the error, it tried to run "tools/dosrt/interp_tcc.sh" which involves building a COMMAND.COM with... "TCC.EXE", using "retroos-host" which I think is compiled in the previous steps.

And the process was aborted (core dumped). The "run.log" (which I cannot find a physical copy of) printed on the console says:

---- run.log ---- Storage: ata0 (1312 MB) Block devices initialized Platform: host=Interp vga_passthrough=false firmware=Substit […]
Show full quote

---- run.log ----
Storage: ata0 (1312 MB)
Block devices initialized
Platform: host=Interp vga_passthrough=false firmware=Substitute audio=EmulatedSilent hostfs=true debug=HostStdout
Disk writes: PERSISTENT — pass `ram-overlay` to protect the disk
Threading initialized
ext4 root (1280 MB)

thread 'main' (10) panicked at kernel/src/kernel/startup.rs:359:23:
ext4 mount failed: ext4_mount failed
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Does this step of the build process require root privileges (sudo)? I'm currently running the command as normal user... though I'm afraid I need to be privileged to be able to mount or umount.

Reply 44 of 51, by gsos

User metadata
Rank Newbie
Rank
Newbie

I attached command.com so you can just restrict to compiling kernel.elf and use command.com from attachment

Reply 45 of 51, by gsos

User metadata
Rank Newbie
Rank
Newbie

Hmm maybe your new version of ext4 tools use new features, the dormant lwext4 lib i use not support. I pushed a branch claude/ext4-mkfs-feature-pinning , that has some updates around not using newer features

Reply 46 of 51, by LSS10999

User metadata
Rank Oldbie
Rank
Oldbie
gsos wrote on 2026-08-20, 17:24:

Hmm maybe your new version of ext4 tools use new features, the dormant lwext4 lib i use not support. I pushed a branch claude/ext4-mkfs-feature-pinning , that has some updates around not using newer features

I'm not sure about the details. I checked the lwext4 library and it seems the repo on GitHub is at least 4 years old (with the official release being at least 10 years old).

So it's entirely possible that newer Linux kernels and extfs tools have enabled certain features by default, that were not supported by lwext4.

Reply 47 of 51, by gsos

User metadata
Rank Newbie
Rank
Newbie

@LSS10999 i removed lwext4 its unmaintained and i had my own fork with bug fixes anyway. So I moved to a new ext4 implementation which should work with the new features.

Reply 48 of 51, by LSS10999

User metadata
Rank Oldbie
Rank
Oldbie
gsos wrote on Yesterday, 17:58:

@LSS10999 i removed lwext4 its unmaintained and i had my own fork with bug fixes anyway. So I moved to a new ext4 implementation which should work with the new features.

After pulling current changes from master I'm able to finish building. Not sure if I should do a clean build but at least I get an "image.bin" artifact.

Should I flash this file as-is to a USB stick so I could boot it on actual system?

And can this be mounted directly with QEMU to boot? I'm using virt-manager (libvirt) for managing QEMU VMs, though.

Reply 49 of 51, by gsos

User metadata
Rank Newbie
Rank
Newbie

yes is you can build image you can boot the image with qemu, use "./run.sh qemu x64 --firmware (uefi/bios) --sound (hda/ac97/sb) (--kvm) " to boot inside qemu.

I haven't build a usb storage driver, so it can't mount usb fs. This should definitely be my next feature.

I use my linux ext4 system, ie. copy the kernel to "/boot/retroos" (tools/install_kernel.sh) add a grub entry. And make a "/home/retroos" that is interrpreted as C: .

Make sure you use "protected disk" which ensures no writes go to ext4 by adding a ram-overlay over a readonly ext4 partition,

menuentry "RetroOS (protected disk)" {
insmod part_gpt
insmod ext2
insmod multiboot
insmod efi_gop
set gfxmode=auto
set gfxpayload=keep
search --no-floppy --file /retroos/kernel.elf --set=root
multiboot /retroos/kernel.elf ram-overlay
boot
}

Reply 50 of 51, by superfury

User metadata
Rank l33t++
Rank
l33t++
gsos wrote on Today, 15:58:
yes is you can build image you can boot the image with qemu, use "./run.sh qemu x64 --firmware (uefi/bios) --sound (hda/ac97/sb) […]
Show full quote

yes is you can build image you can boot the image with qemu, use "./run.sh qemu x64 --firmware (uefi/bios) --sound (hda/ac97/sb) (--kvm) " to boot inside qemu.

I haven't build a usb storage driver, so it can't mount usb fs. This should definitely be my next feature.

I use my linux ext4 system, ie. copy the kernel to "/boot/retroos" (tools/install_kernel.sh) add a grub entry. And make a "/home/retroos" that is interrpreted as C: .

Make sure you use "protected disk" which ensures no writes go to ext4 by adding a ram-overlay over a readonly ext4 partition,

menuentry "RetroOS (protected disk)" {
insmod part_gpt
insmod ext2
insmod multiboot
insmod efi_gop
set gfxmode=auto
set gfxpayload=keep
search --no-floppy --file /retroos/kernel.elf --set=root
multiboot /retroos/kernel.elf ram-overlay
boot
}

Where can this latest version be found (repo)?

Also, does it support pre-SB16 real (or Dosbox/UniPCemu emulated) hardware (SB1.x, SB2.x, SB Pro, pure Adlib (or gold?), MPU-401, game blaster)?

Author of the UniPCemu emulator.
UniPCemu Git repository
UniPCemu for Android, Windows, PSP, Vita and Switch on itch.io

Reply 51 of 51, by gsos

User metadata
Rank Newbie
Rank
Newbie

Yes, it should just be master branch on the repo. I'm currently not very good in keeping master healthy at all times, but it should work.

For hardware the model is, if it exist natively, (s)vga or sb/adlib/mpu-401, then use the hardware natively, ie. the ports are open/pass through and the games talk to hardware directly. For sb, it still traps some ports for recording so we can perfectly save and restore its state. The only thing we don't use natively is DMA as that is privileged and the paging can't guarantee contiguous and <16mb memory, so we have a virtualized DMA the games talk to that correctly re-pages the games virtual address ranges into actual contiguous low mem physical ranges.

If the hardware does not exist natively (for instance pure uefi GOP without VGA support or AC97/HDA soundcard) we fully emulate those and games don't know. For super vga modes, we do wrap the native BIOS so that we only support modes that we can fully emulate, this allows seamless switching dos-apps and presenting OSD monitor on top of playing games.