Merge branch redox:master into upstream-rustc

This commit is contained in:
Wildan Mubarok 2025-10-26 16:13:38 +00:00
commit 9be2320332
24 changed files with 226 additions and 78 deletions

View File

@ -124,26 +124,26 @@ If you don't know programming:
- Test the [daily images](https://static.redox-os.org/img/) on your computer and add the report on the [Hardware Compatibility](https://gitlab.redox-os.org/redox-os/redox/-/blob/master/HARDWARE.md) list
- Monitor and warn developers if the [daily images](https://static.redox-os.org/img/) are outdated
- Use and test Redox, and file issues for bugs or needed features (please check for duplicates first)
- Use/test Redox and create issues for bugs or needed features (please check for duplicates first)
- Fix and write documentation
- Find or fix typos in configuration
If you don't know how to code in Rust, but know other programming languages:
If you don't know how to code in Rust but know other programming languages:
- Web development on the website (we don't accept JavaScript code)
- Web development on the website (we only accept minimal JavaScript code to preserve performance)
- Write unit tests (may require minimal knowledge of Rust)
- Port C/C++ programs to Redox (read the `TODO`s of the recipes on the [WIP category](https://gitlab.redox-os.org/redox-os/cookbook/-/tree/master/recipes/wip?ref_type=heads))
- Port C/C++ programs to Redox (read the `TODO`s of the recipes on the [WIP category](https://gitlab.redox-os.org/redox-os/cookbook/-/tree/master/recipes/wip))
- Port programs to Redox
If you know how to code in Rust, but don't know operating system development:
If you know how to code in Rust but don't know operating system development:
- See the [easy](https://gitlab.redox-os.org/groups/redox-os/-/issues/?label_name[]=easy) issues
- See the "[good first issue](https://gitlab.redox-os.org/groups/redox-os/-/issues/?label_name[]=good%20first%20issue)" issues
- See the [help wanted](https://gitlab.redox-os.org/groups/redox-os/-/issues/?label_name[]=help%20wanted) issues (it's worth noting the skill level varies between projects, but a large subset of these should be approachable by contributors familiar with regular Rust/Unix application programming)
- Improve the package manager, or other meta-tools like `redoxer` or `installer`
- Improve the package manager, or build system tooling like `redoxer` or `installer`
- Improve the [Ion](https://gitlab.redox-os.org/redox-os/ion) shell, or other high-level or mid-level projects
- Port Rust programs to Redox, possibly including dependencies, and C library extensions if necessary (also look for issues with the `port` label)
- Improve program compatibility in relibc by e.g. implementing missing APIs
- Port Rust programs (also look for issues with the `port` label)
- Improve application compatibility in relibc by e.g. implementing missing POSIX/Linux functions
If you know how to code in Rust, and have experience with systems software/OS development:
@ -157,10 +157,9 @@ If you know how to code in Rust, and have experience with systems software/OS de
- Improve, profile, and optimize code, especially in the kernel, filesystem, and network stack
- Improve or write device drivers
For those who want to contribute to the Redox GUI, our GUI strategy has recently changed.
For those who want to contribute to the Redox GUI, our GUI strategy has changed.
- We are improving the [Orbital](https://gitlab.redox-os.org/redox-os/orbital) display server and window manager, you can read more about it on [this tracking issue](https://gitlab.redox-os.org/redox-os/redox/-/issues/1430).
- Redox is in the process of adopting other Rust-written GUI toolkits, such as [Iced](https://iced.rs) and [Slint](https://slint-ui.com/). Please check out those projects if this is your area of interest.
- OrbTk is in maintenance mode, and its developers have moved to other projects such as the ones below. There is currently no Redox-specific GUI development underway.
## Priorities
@ -234,7 +233,7 @@ You can find important tips on the [Development Tips](https://doc.redox-os.org/b
We maintain a list of wikis, articles and videos to learn Rust, OS development and computer science on the [References](https://doc.redox-os.org/book/references.html) page.
If you are skilled there's a possibility that they could improve your knowledge in some way.
If you are skilled/experienced there's still a possibility that they could improve your knowledge in some way.
## Other Ways to Contribute

View File

@ -13,13 +13,13 @@ This document tracks the current hardware compatibility of Redox.
## Why hardware reports are needed?
Each computer model have different hardware interface/firmware implementations and devices, which can cause the following problems:
Each computer model have different hardware interfaces, firmware implementations and devices, which can cause the following problems:
- Boot bugs
- Lack of device support
- Performance degradation
These reports helps us to fix the problems above.
These reports helps us to fix the problems above, your report may help to fix many computers affected by the same bugs or missing drivers.
## What if my computer is customized?

14
config/aarch64/tests.toml Normal file
View File

@ -0,0 +1,14 @@
# Configuration for testing
include = ["../tests.toml"]
# Override the default settings here
# General settings
[general]
# Filesystem size in MiB
# filesystem_size = 10000
# Package settings
[packages]
# example = {}

View File

@ -12,44 +12,4 @@ prompt = false
# Package settings
[packages]
dev-redox = {}
[[files]]
path = "/home/user/test.rs"
data = """
fn main() {
println!("Hello, Redox!");
}
"""
[[files]]
path = "/home/user/test.c"
data = """
#include <stdio.h>
int main(void) {
printf("Hello, Redox!\\n");
}
"""
[[files]]
path = "/home/user/test.cpp"
data = """
#include <iostream>
int main()
{
std::cout << "Hello, Redox!" << std::endl;
}
"""
[[files]]
path = "/home/user/test.py"
data = """
print("Hello, Redox!")
"""
[[files]]
path = "/home/user/test.lua"
data = """
print("Hello, Redox!")
"""
hello-redox = {}

14
config/i686/tests.toml Normal file
View File

@ -0,0 +1,14 @@
# Configuration for testing
include = ["../tests.toml"]
# Override the default settings here
# General settings
[general]
# Filesystem size in MiB
# filesystem_size = 10000
# Package settings
[packages]
# example = {}

View File

@ -5,6 +5,7 @@ include = ["base.toml"]
# Package settings
[packages]
netdb = {}
netutils = {}
## Network init

View File

@ -0,0 +1,14 @@
# Configuration for testing
include = ["../tests.toml"]
# Override the default settings here
# General settings
[general]
# Filesystem size in MiB
# filesystem_size = 10000
# Package settings
[packages]
# example = {}

View File

@ -21,10 +21,8 @@ git = {}
installer = {}
ion = {}
kibi = {}
netdb = {}
pkgutils = {}
redoxfs = {}
resist = {}
[[files]]
path = "/usr/lib/init.d/30_console"

22
config/tests.toml Normal file
View File

@ -0,0 +1,22 @@
# Configuration for testing
include = ["server.toml"]
# General settings
[general]
# Filesystem size in MiB
filesystem_size = 10000
# Do not prompt if settings are not defined
prompt = false
# Package settings
[packages]
acid = {}
resist = {}
relibc-tests = {}
os-test = {}
openposixtestsuite = {}
redox-posix-tests = {}
vttest = {}
benchmarks = {}
hello-redox = {}

View File

@ -12,6 +12,7 @@ filesystem_size = 2048
# Package settings
[packages]
gtk3 = {}
htop = {}
libnettle = {}
llvm18 = {}
mesa-x11 = {}

View File

@ -27,6 +27,7 @@ base-initfs = {}
bash = {}
binutils = {}
bootloader = {}
bottom = {}
bzip2 = {}
ca-certificates = {}
cairo = {}
@ -87,6 +88,7 @@ gnu-make = {}
#harfbuzz = {} # depends on glib which does not build
#hematite = {} # needs crate patches for redox-unix
hicolor-icon-theme = {}
htop = {}
installer = {}
installer-gui = {}
intel-one-mono = {}

View File

@ -16,9 +16,11 @@ periodictable = {}
intel-one-mono = {}
# Shell Apps
bottom = {}
curl = {}
git = {}
gnu-grep = {}
htop = {}
ripgrep = {}
sodium = {}
terminfo = {}

View File

@ -12,6 +12,7 @@ filesystem_size = 4096
# Daemons
openssh = {}
nginx = {}
rustysd = {}
# Backends
php84 = {}
@ -28,11 +29,84 @@ rsync = {}
vim = {}
sqlite3 = {}
# tmux = {}
# htop = {}
htop = {}
# Content
website = {}
[[files]]
# Undocumented usage of rsdctl, pointing to notifications dir
path = "/usr/lib/init.d/19_rustyd"
data = """
export RSDCTL_ADDR /var/run/rustysd/control.socket
"""
[[files]]
path = "/usr/lib/init.d/98_keygen_sh"
data = """
bash /root/keygen.sh
"""
[[files]]
path = "/usr/lib/init.d/99_rustysd"
data = """
rustysd --conf /etc/rustysd
"""
[[files]]
path = "/etc/rustysd/system/network-online.target"
data = """
[Unit]
Description=The target after networks has online
[Install]
WantedBy=default.target
"""
[[files]]
path = "/etc/rustysd/system/multi-user.target"
data = """
[Unit]
Description=The target after user administrations has online
[Install]
WantedBy=default.target
"""
[[files]]
path = "/etc/rustysd/system/nginx.service"
data = """
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/nginx
TimeoutStopSec=5
[Install]
WantedBy=multi-user.target
"""
[[files]]
path = "/etc/rustysd/system/ssh.service"
data = """
[Unit]
Description=OpenBSD Secure Shell server
After=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/sshd
TimeoutStopSec=5
[Install]
WantedBy=multi-user.target
"""
[[files]]
path = "/home/user/public_html/index.php"
data = """
@ -169,6 +243,19 @@ shell = "/usr/bin/ion" #TODO: nologin?
password = ""
shell = "/usr/bin/ion" #TODO: nologin?
[[files]]
path = "/root/keygen.sh"
data = """
#!/usr/bin/env bash
if [ ! -f /etc/ssh/ssh_host_dsa_key ]; then
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ""
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ""
fi
"""
[[files]]
path = "/home/user/server.sh"
data = """
@ -194,6 +281,9 @@ data = """
# To start the daemon, run
# > sudo bash server.sh
#
# A WIP port of rustysd is available, you can try start it manually
# > sudo rustysd --conf /etc/rustysd
#
# The server will start port 22 (ssh), 80 (static web) and 8080 (php)
##############################################################################
"""

14
config/x86_64/tests.toml Normal file
View File

@ -0,0 +1,14 @@
# Configuration for testing
include = ["../tests.toml"]
# Override the default settings here
# General settings
[general]
# Filesystem size in MiB
# filesystem_size = 10000
# Package settings
[packages]
# example = {}

@ -1 +1 @@
Subproject commit ae06273f81ac0eb488c8b8b5d85f5deb38df72cc
Subproject commit 8851a304e6710b953b4974bd714fdce4411e2e50

View File

@ -46,10 +46,10 @@ else
"prefix/$(TARGET)/gcc-install.tar.gz" \
"prefix/$(TARGET)/relibc-install.tar.gz" \
"prefix/$(TARGET)/rust-install.tar.gz"
rm -rf "build/toolchain/$(TARGET)"
mkdir -p "build/toolchain/$(TARGET)"
cp "prefix/$(TARGET)/gcc-install.tar.gz" "build/toolchain/$(TARGET)/gcc-install.tar.gz"
cp "prefix/$(TARGET)/relibc-install.tar.gz" "build/toolchain/$(TARGET)/relibc-install.tar.gz"
cp "prefix/$(TARGET)/rust-install.tar.gz" "build/toolchain/$(TARGET)/rust-install.tar.gz"
cd "build/toolchain/$(TARGET)" && sha256sum -b * > SHA256SUM
rm -rf "build/toolchain/$(HOST_TARGET)/$(TARGET)"
mkdir -p "build/toolchain/$(HOST_TARGET)/$(TARGET)"
cp "prefix/$(TARGET)/gcc-install.tar.gz" "build/toolchain/$(HOST_TARGET)/$(TARGET)/gcc-install.tar.gz"
cp "prefix/$(TARGET)/relibc-install.tar.gz" "build/toolchain/$(HOST_TARGET)/$(TARGET)/relibc-install.tar.gz"
cp "prefix/$(TARGET)/rust-install.tar.gz" "build/toolchain/$(HOST_TARGET)/$(TARGET)/rust-install.tar.gz"
cd "build/toolchain/$(HOST_TARGET)/$(TARGET)" && sha256sum -b * > SHA256SUM
endif

View File

@ -46,12 +46,19 @@ CONTAINERFILE?=podman/redox-base-containerfile
export NPROC=nproc
export REDOX_MAKE=make
ifneq ($(PODMAN_BUILD),1)
HOST_TARGET := $(shell env -u RUSTUP_TOOLCHAIN rustc -vV | grep host | cut -d: -f2 | tr -d " ")
# x86_64 linux hosts have all toolchains
ifneq ($(HOST_TARGET),x86_64-unknown-linux-gnu)
$(info The binary prefix is only built for x86_64 Linux hosts)
PREFIX_BINARY=0
endif
ifeq ($(ARCH),aarch64)
# aarch64 linux hosts have aarch64 toolchain
ifneq ($(HOST_TARGET),aarch64-unknown-linux-gnu)
$(info The $(ARCH) binary prefix is only built for x86_64 and aarch64 Linux hosts)
PREFIX_BINARY=0
endif
else
$(info The $(ARCH) binary prefix is only built for x86_64 Linux hosts)
PREFIX_BINARY=0
endif
endif
ifeq ($(SCCACHE_BUILD),1)

View File

@ -58,6 +58,12 @@ mount_extra: $(HOST_FSTOOLS) FORCE
sleep 2
pgrep redoxfs
mount_live: $(HOST_FSTOOLS) FORCE
mkdir -p $(MOUNT_DIR)
$(REDOXFS) $(BUILD)/redox-live.iso $(MOUNT_DIR)
sleep 2
pgrep redoxfs
unmount: FORCE
sync
-$(FUMOUNT) $(MOUNT_DIR) || true

View File

@ -1,6 +1,6 @@
# Configuration file for redox-installer, Cookbook and RedoxFS FUSE
fstools: $(FSTOOLS_TAG)
fstools: $(FSTOOLS_TAG) $(HOST_FSTOOLS)
# These tools run inside Podman if it is used, or on the host if Podman is not used
$(FSTOOLS_TAG): cookbook installer $(CONTAINER_TAG)

View File

@ -176,7 +176,7 @@ else ifeq ($(PREFIX_BINARY),1)
$(PREFIX)/rust-install.tar.gz:
mkdir -p "$(@D)"
#TODO: figure out why rust-install.tar.gz is missing /lib/rustlib/$(HOST_TARGET)/lib
wget -O $@.partial "https://static.redox-os.org/toolchain/$(TARGET)/relibc-install.tar.gz"
wget -O $@.partial "https://static.redox-os.org/toolchain/$(HOST_TARGET)/$(TARGET)/relibc-install.tar.gz"
mv $@.partial $@
$(PREFIX)/rust-install: $(PREFIX)/rust-install.tar.gz

View File

@ -1,6 +1,6 @@
# Configuration file to install the recipe dependencies inside the Podman container
FROM debian:trixie
FROM docker.io/library/debian:trixie
# _UID_ must be replaced with the user's uid on host
# podman root is mapped to your user id on host during build,
@ -36,7 +36,6 @@ RUN useradd --create-home --no-log-init --uid _UID_ poduser \
gtk-doc-tools \
help2man \
intltool \
libc6-dev-i386 \
libexpat-dev \
libfontconfig1-dev \
libfuse3-dev \
@ -72,7 +71,6 @@ RUN useradd --create-home --no-log-init --uid _UID_ poduser \
ruby \
scons \
ssh \
syslinux-utils \
texinfo \
unifdef \
unzip \
@ -84,4 +82,9 @@ RUN useradd --create-home --no-log-init --uid _UID_ poduser \
xxd \
zip \
zlib1g-dev \
zstd
zstd \
&& if [ "$(uname -m)" = "x86_64" ]; then \
apt-get install -y --no-install-recommends \
libc6-dev-i386 \
syslinux-utils \
; fi

2
podman_bootstrap.sh Executable file → Normal file
View File

@ -280,7 +280,7 @@ fedora()
fi
# Use rpm -q <package> to check if it's already installed
PKGS=$(for pkg in podman curl make fuse3 fuse-overlayfs slirp4netns gdb; do rpm -q $pkg > /dev/null || echo $pkg; done)
PKGS=$(for pkg in podman curl make fuse3 fuse3-devel fuse-overlayfs slirp4netns gdb; do rpm -q $pkg > /dev/null || echo $pkg; done)
# If the list of packages is not empty, install missing
COUNT=$(echo $PKGS | wc -w)
if [ $COUNT -ne 0 ]; then

2
relibc

@ -1 +1 @@
Subproject commit 7ed934a01d2ac8ab603b6dc24e918d8197192068
Subproject commit 56386f1e260a95eedd7448cded44cbbcc207cbb7

View File

@ -20,16 +20,17 @@ fi
if [ -z "${ARCH}" ]
then
export ARCH=x86_64
export ARCH="$(uname -m)"
fi
if [ -z "${CONFIG_NAME}" ]
then
export CONFIG_NAME=demo
export CONFIG_NAME=desktop
fi
IMAGE="build/${ARCH}/${CONFIG_NAME}/filesystem.img"
set -x
rm -f "${IMAGE}"
make "${IMAGE}"
sudo popsicle "${IMAGE}" "${DISK}"
set +x