forked from koniifer/ableos
frowny
This commit is contained in:
parent
a9350952b7
commit
4dd3699e0e
68
MANIFESTO.md
68
MANIFESTO.md
|
@ -1,68 +0,0 @@
|
||||||
# The Design of AbleOS
|
|
||||||
## The unix philosophy and why it shouldn't exist
|
|
||||||
small is only beautiful if its complete.
|
|
||||||
grep for example supports the `-r` flag which should instead be `grep`+`find`
|
|
||||||
Everything is not a stream of bytes.
|
|
||||||
|
|
||||||
programs can do multiple things well
|
|
||||||
`cat`, `head` and `tail` could all be one program with a flag
|
|
||||||
`which head` `which tail` `which cat` should all return the same binary with different flags
|
|
||||||
```
|
|
||||||
which head == /bin/cat range=0-10
|
|
||||||
|
|
||||||
which tail == /bin/cat reverse_index=true range=0-10
|
|
||||||
|
|
||||||
which cat == /bin/cat
|
|
||||||
```
|
|
||||||
|
|
||||||
build a prototype quickly only applies if you are being pressured. do thing quickly then refine
|
|
||||||
'choose portability over effeciency' this is a flawed idealogy choose modularity over pure portability
|
|
||||||
'store data in flat text files' this leads to a psuedostandardization on KVPair configuration languages that all sit in a flat text file. Instead pick a configuration format that gets loaded into a tree structure
|
|
||||||
|
|
||||||
## File Systems
|
|
||||||
### The amount of files inside of a folder
|
|
||||||
32765. Why you might ask?
|
|
||||||
### Dot files
|
|
||||||
`dotfiles` were a mistake given to us by bad programmers mocking better programmers. [link](https://web.archive.org/web/20230413171520/http://xahlee.info/UnixResource_dir/writ/unix_origin_of_dot_filename.html)
|
|
||||||
|
|
||||||
### File name case sensitivity
|
|
||||||
Case sensitivity seems like a great idea! But in practice leads to the following filetree
|
|
||||||
```
|
|
||||||
/kernel
|
|
||||||
/Kernel
|
|
||||||
/kErnEl
|
|
||||||
/KeRnEl
|
|
||||||
```
|
|
||||||
which is a nightmare and you should be erradicated if you think this is a positive
|
|
||||||
provide a display name for files that allows case and save the file as caseless
|
|
||||||
|
|
||||||
### File name character limits
|
|
||||||
unix is a plauge upon this earth. name a file `:(){ :|:& };:` and try listing it. You have lost access to your terminal.
|
|
||||||
if you defined a sane method of listing files and allowing programs to provide the OS a standard method of providing argument suggestions and being aware you would never run into this issue
|
|
||||||
|
|
||||||
## CLI vs GUI
|
|
||||||
Graphics are not your enemy unix lovers. You mustn't be stuck in 1981. Times have changed! You can have a graphical shell enviroment. SGI Irix was aware of this in 1988, not perfect of course but 7 years after dos is an impressive leap.
|
|
||||||
FFMPEG??? Why no gui? Give me a good git ui
|
|
||||||
|
|
||||||
|
|
||||||
### Emails plain text
|
|
||||||
Unix believes in plain text emails. Quotes are `>`
|
|
||||||
|
|
||||||
### Unix Wizards and Instability
|
|
||||||
[Do not meddle in the affairs of Unix, for it is subtle and quick to anger.]
|
|
||||||
|
|
||||||
### Unix why are your mouse a file?
|
|
||||||
This list is incomplete
|
|
||||||
`/dev/input/event1` The PS2 Mouse
|
|
||||||
`/dev/input/event3` The USB Mouse
|
|
||||||
`/dev/input/psaux` The PS2 Mouse
|
|
||||||
`/dev/input/psmouse` The PS2 Mouse
|
|
||||||
`/dev/input/mice` The Not(?) PS2 Mouse I think?
|
|
||||||
`/dev/input/mouse0` The not Not(?) ps2 mouse? First usb mouse I think?
|
|
||||||
`/dev/input/usbhid` USB mice (should be autodetected)
|
|
||||||
`/dev/input/sermouse` Most serial mice
|
|
||||||
`/dev/input/logibm` Bus mouse connected to Logitech adapter card
|
|
||||||
`/dev/input/inport` Bus mouse connected to ATI or Microsoft InPort card
|
|
||||||
`/dev/input/by-id/usb-<usbid here>` A usb mouse via its id
|
|
||||||
|
|
||||||
I propose a unified system for input via a Device Tree of sorts
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
```
|
||||||
TODO
|
TODO
|
||||||
- Integrate HBVM
|
- Integrate HBVM
|
||||||
HBVM also needs full spec compliance
|
HBVM also needs full spec compliance
|
||||||
|
@ -23,10 +24,17 @@ TODO
|
||||||
- VFS
|
- VFS
|
||||||
- Disk driver
|
- Disk driver
|
||||||
- A ton more
|
- A ton more
|
||||||
|
```
|
||||||
|
|
||||||
# Community
|
# Community
|
||||||
[Discord](https://discord.gg/JrKVukDtgs)
|
[Discord](https://discord.gg/JrKVukDtgs)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Compiling
|
# Compiling
|
||||||
|
Firstly, I would like to apologize. I am not capable of supporting building on any random machine with any random operating system.
|
||||||
|
|
||||||
|
AbleOS very likely builds with `nix-shell` on your operating system.
|
||||||
|
|
||||||
1. `git submodule update --init`
|
1. `git submodule update --init`
|
||||||
1. `cargo repbuild`
|
1. `cargo repbuild`
|
||||||
|
|
|
@ -1 +1,4 @@
|
||||||
//!
|
//!
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
unsafe extern "C" fn _kernel_start() -> ! {}
|
||||||
|
|
25
kernel/targets/aarch64-virt-ableos.json
Normal file
25
kernel/targets/aarch64-virt-ableos.json
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
"arch": "aarch64",
|
||||||
|
"data-layout": "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128",
|
||||||
|
"disable-redzone": true,
|
||||||
|
"env": "",
|
||||||
|
"executables": true,
|
||||||
|
"features": "+strict-align,+neon,+fp-armv8",
|
||||||
|
"linker": "rust-lld",
|
||||||
|
"linker-flavor": "ld.lld",
|
||||||
|
"linker-is-gnu": true,
|
||||||
|
"pre-link-args": {
|
||||||
|
"ld.lld": [
|
||||||
|
"-Taarch64-qemu.ld"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"llvm-target": "aarch64-unknown-none",
|
||||||
|
"max-atomic-width": 128,
|
||||||
|
"os": "none",
|
||||||
|
"panic-strategy": "abort",
|
||||||
|
"relocation-model": "static",
|
||||||
|
"target-c-int-width": "32",
|
||||||
|
"target-endian": "little",
|
||||||
|
"target-pointer-width": "64",
|
||||||
|
"vendor": ""
|
||||||
|
}
|
51
meta.md
51
meta.md
|
@ -1,51 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ARI AbleOS Remote Install
|
|
||||||
|
|
||||||
Server
|
|
||||||
/boot/server_kernel_x86_64.bin
|
|
||||||
/boot/kernel_x86_64.bin
|
|
||||||
/boot/kernel_aarch64.bin
|
|
||||||
|
|
||||||
/home/projects/askl.askl - aksldfhlkasjdhflkajshdflkj
|
|
||||||
|
|
||||||
|
|
||||||
ARI_SERVER.wasm
|
|
||||||
NAS 10.1.10.10
|
|
||||||
|
|
||||||
ARI 10.1.10.10
|
|
||||||
/boot/limine.cfg
|
|
||||||
/boot/kernel_x86_64.bin
|
|
||||||
/boot/kernel.toml
|
|
||||||
/home/projects/askl.askl
|
|
||||||
aksldfhlkasjdhflkajshdflkj
|
|
||||||
|
|
||||||
|
|
||||||
ARI 10.1.10.10
|
|
||||||
/boot/limine.cfg
|
|
||||||
/boot/kernel_aarch64.bin
|
|
||||||
/boot/kernel.toml
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/system/
|
|
||||||
/shared/
|
|
||||||
/home/programs/
|
|
||||||
project_name/
|
|
||||||
project_name.wasm
|
|
||||||
project_name.toml
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/system/pkgman.toml
|
|
||||||
|
|
||||||
//////
|
|
||||||
[repositories]
|
|
||||||
PUR = "https://git.ablecorp.us/ableos/pur"
|
|
||||||
|
|
|
@ -35,6 +35,9 @@ fn main() -> Result<(), Error> {
|
||||||
if arg == "rv64" || arg == "riscv64" || arg == "riscv64-virt" {
|
if arg == "rv64" || arg == "riscv64" || arg == "riscv64-virt" {
|
||||||
target = Target::Riscv64Virt;
|
target = Target::Riscv64Virt;
|
||||||
}
|
}
|
||||||
|
if arg == "aarch" || arg == "arm64" {
|
||||||
|
target = Target::Aarch64;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
build(release, target).change_context(Error::Build)
|
build(release, target).change_context(Error::Build)
|
||||||
|
@ -49,6 +52,9 @@ fn main() -> Result<(), Error> {
|
||||||
if arg == "rv64" || arg == "riscv64" || arg == "riscv64-virt" {
|
if arg == "rv64" || arg == "riscv64" || arg == "riscv64-virt" {
|
||||||
target = Target::Riscv64Virt;
|
target = Target::Riscv64Virt;
|
||||||
}
|
}
|
||||||
|
if arg == "arm64" || arg == "aarch64" {
|
||||||
|
target = Target::Aarch64;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
build(release, target)?;
|
build(release, target)?;
|
||||||
|
@ -138,6 +144,9 @@ fn build(release: bool, target: Target) -> Result<(), Error> {
|
||||||
if target == Target::Riscv64Virt {
|
if target == Target::Riscv64Virt {
|
||||||
com.args(["--target", "targets/riscv64-virt-ableos.json"]);
|
com.args(["--target", "targets/riscv64-virt-ableos.json"]);
|
||||||
}
|
}
|
||||||
|
if target == Target::Aarch64 {
|
||||||
|
com.args(["--target", "targets/aarch64-virt-ableos.json"]);
|
||||||
|
}
|
||||||
|
|
||||||
match com.status() {
|
match com.status() {
|
||||||
Ok(s) if s.code() != Some(0) => bail!(Error::Build),
|
Ok(s) if s.code() != Some(0) => bail!(Error::Build),
|
||||||
|
@ -168,6 +177,7 @@ fn run(release: bool, target: Target) -> Result<(), Error> {
|
||||||
let mut com = match target {
|
let mut com = match target {
|
||||||
Target::X86_64 => Command::new("qemu-system-x86_64"),
|
Target::X86_64 => Command::new("qemu-system-x86_64"),
|
||||||
Target::Riscv64Virt => Command::new("qemu-system-riscv64"),
|
Target::Riscv64Virt => Command::new("qemu-system-riscv64"),
|
||||||
|
Target::Aarch64 => Command::new("qemu-system-aarch64"),
|
||||||
};
|
};
|
||||||
|
|
||||||
if target == Target::X86_64 {
|
if target == Target::X86_64 {
|
||||||
|
@ -212,6 +222,13 @@ fn run(release: bool, target: Target) -> Result<(), Error> {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if target == Target::Aarch64 {
|
||||||
|
com.args([
|
||||||
|
"-M", "virt", "-m", //
|
||||||
|
"128M", "-serial", "stdio",
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
match com
|
match com
|
||||||
.status()
|
.status()
|
||||||
.into_report()
|
.into_report()
|
||||||
|
@ -306,6 +323,7 @@ impl Context for OvmfFetchError {}
|
||||||
enum Target {
|
enum Target {
|
||||||
X86_64,
|
X86_64,
|
||||||
Riscv64Virt,
|
Riscv64Virt,
|
||||||
|
Aarch64,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Display)]
|
#[derive(Debug, Display)]
|
||||||
|
|
Loading…
Reference in a new issue