#Zinnia
1 messages ยท Page 2 of 1
yeah info tlb is just an entry-by-entry page table dump
we are so back
Nice
Epic
waow
before doing anythin else, i should probably use a real interrupt timer though
i mean it's probably me just misconfiguring the lapic, but it seems to spin into an infinite interrupt handler loop
Do you write to eoi? lol not sure what I was thinking
yea
i'm setting the divisor to 16
and the init counter to -1
then i poll 10ms with the hpet
and stop

yea i think i see the issue
but even then, i have no idea what i'm actually doing lol
Magic numbers 
yes
Have you tried a smaller divisor?
i think this is the issue lol
oh one thing that i forgot about
is it possible to interrupt an interrupt?
if yes, how is that handled
Depends on the interrupt flag
i knew it at some point but i did so much rv64 that i forgot
depends whether or not it's a trap gate
so exceptions can happen at any time, and with the exception of NMIs/MCEs the cpu doesnt really have the concept of being in an interrupt
if you're in an isr - its up to you to have flags.if cleared to prevent non-exception interrupts
you can have nested interrupts though, and it works like you expect. The cpu does normal interrupt entry stuff.
it works until you run out of stack space ๐
and for idt entries, make sure you're using interrupt gates and not trap gates (trap gates leave the interrupt flag set upon entry). They are useful, but you'll know when you want one.
yea i'm using interrupt gates
finally running on real hw again
logs are hopefully easier to read now
Not enough color smh
HPET working on real hardware, LAPIC is not as much of a fan of my code
hpet at 0x0000000000000000
sounds healthy
good job :^)
the format of the logs reminds me very much of linux
not a bad thing at all
that's the idea 
I love the name of this project. Just stopped by to say that lol.
alright, the scheduler seems to be properly working now
now i need an actual file system
initrd in probably NOT going to cut it
i'll start with fat32, i need that shit anyways for esp
le cool
I like how I was the origin of this
in the managarm thread one day I posted this
yes.
since i now have an arm laptop i should try to port to aarch64
my arm is a laptop
and i need to check if cross compilation actually works
i have my doubts
hm
if i rewrite my bootstrap tool in python i can reasonably have a self-hosting kernel
i don't think i'll manage to port rust stdlib anytime soon
although, rust with networking is kinda nice
when mRuststdlib @managarm peoples?
i think managarm already has a rust port
and llvm obviously
just not upstream
tbh if the mlibc target was upstream, i'd exclusively use mlibc abi bits instead of linux
gpl 
this
that's super copyleft iirc
i like the "give back" aspect of the gpl
but i also don't want to force people
as i said, i don't know shit
i just picked one that i thought of first
lol
yeah gpl is an L
yea therefore my kernel is an L
i'm so close to unironically doing a uGPU project
time to relicense
real
i would do uXHCI/uUSB if it didn't sound so retarded + if i had any resemblance of motivation
uUSB lol
huh
yea
join forces?
i have written some DRM drivers for linux before
i'd probably quit like my last project
which gpus do u wanna support
anything atombios
amd?
yea
i se
i915
i was gonna do intel
and potentially nvidia gsp
but im probably not starting any time soon
i was gonna make it so it can work with an existing drm system, or be a drop-in one itself
based on the configuration
how would that "link" together?
compile time option
oh i havent designed that yet, but ye
something like that probably
will have to see once i get there
amd retarbios
imo having some sort of function pointer thing would be better
like flanterm?
yeah i guess
with a callback struct
yea yea
real
for embedded stuff?
just callbacks would be nice
like was it a project of some sort or why
yea, a hack week project at work
never submitted it because some parts are missing
but it's a driver for the S3 Trio64
whats a hack week
it can only do one resolution mode atm, i don't properly parse the memory modes yet
next hack week 
did u implement 2d/3d accel for it?
i do llvm and risc-v hardware enablement at suse
nice
here's a pic of it in action
cool stuff
but generally, i know nothing else about drm/gpus so this is more of a learning exercise for me
same with my os tbh
teaching myself how shit works under the hood
my biggest achievement is getting a bare metal kernel to render a 3d triangle on an igpu
woah
like with shaders and stuff
i'm too stupid to even get gpu passthrough working
i have an amd raphael igpu but it refuses to not load the kernel module and put it through vfio
zaaamn
this is bare metal not even passthrough lol
took 99999999 reboots
fun
i was too dumb to realize i could passthrough and ssh into it
tbf, my current mainboard has a com port, so in theory i could debug early crashes
the main problem is iteration time
yep
Damn cool
u get 0 feedback from the gpu
the screen just goes black
so u have to do random shit until it works
currently, menix won't even boot on real hardware if you don't add smp=1 to the cmdline
it gets stuck somewhere
it cost me so much pain lol
but i can't tell because it happens before fb init
those are fun bugs
i usually debug those with hang debugging
or in your case u can do triple fault debugging
i need to buy an rs232 breakout board
Yeah I can imagine lol
its almost 2k lines of just stuff like that
building out dword buffers and commands
and shaders look like this
just dumped from whatever mesa produced for that igpu
lol
shaders talk to each other via special gpu shared memory buffers
its all very interesting and cool
we can sort that out once I'm back
based
@jovial crypt may i cross-reference your atombios parser
Yea that's fine
i caved and made fbcon not a module anymore
it's now exclusively for early print only
weird
menix does NOT like my framework laptop
interesting, I also have a framework I use for testing - would be curious to hear what the issue is when you find it
if only there was serial
I don't even get past the allocation screen apparently
i think you can get serial
if you really hate yourself, you can reflash the embedded controller (the code is on github)
and i2c to it
to get logs
if you have a Suzy Qable thingy (or any other equivalent ChromeOS debug cable), minicom -D "$(cros_sdk -- dut-control -o cpu_uart_pty)" can get you UART on the AP apparantly
from another device
no disassembly required
or whatever
I don't hate myself that muh
ive had tons of EC related bugs tho
i mean tbh serial won't change much because it should already output to fb
@fiery marlin i think i know what the issue is
i get a reset before really early arch init
which hints that its a problem with COM1
i found the issue
if you try probe serial it crashes
i patched out serial and now it works
lmfao what

maybe irq stuff?
dunno
like you get an irq you didnt expect or whatever
Oh lol, thanks for the ping
I wonder if there's something non standard about it
probably not present and port io on it causes a #UD?
i don't know how else to explain it
because on my PC it simply just says no ACK and disables it
man i have no clue why it's dying now
i hate interrupt handling so much
my Framework is throwing a gpf on an iretq
hate stack corruption
the worst part is that this is not happening in qemu
only on the framework
@neon flicker help
gl,hf

what you can try to do is make sure
the interrupt frame's last 5 values are valid
before returning
unless you have no printf
then gl
i do
you printed them?
a stub does it on entry
ah I see
/* Internal function called by one of the stubs. */
.align 0x10
interrupt_internal:
pushq %gs /* Push CPU ID. */
push_all_regs
mov %rsp, %rdi /* Load the Context* as first argument. */
xor %rbp, %rbp /* Zero out the base pointer so we don't backtrace into the user program */
.extern isr_handler
call isr_handler /* Call interrupt handler */
mov %rax, %rsp /* interrupt_handler returns a pointer to the new context. */
pop_all_regs
add $0x18, %rsp /* Skip Context.error, Context.isr, and Context.core fields. */
swapgs_if_necessary /* Change GS back to user mode if we came from user mode. */
iretq
/* Define 256 interrupt stubs using the macro above. */
.rept 256
.align 0x10
interrupt_\+:
cli
swapgs_if_necessary /* Change GS to kernel mode if we're coming from user mode. */
.if !(\+ == 8 || (\+ >= 10 && \+ <= 14) || \+ == 17 || \+ == 21 || \+ == 29 || \+ == 30)
pushq $0 /* If this is an interrupt that doesn't push an error code, push one ourselves. */
.endif
pushq $\+ /* Push the ISR to the stack. */
jmp interrupt_internal
.endr
/* Build a table of all the interrupt stubs */
.section .rodata
.global interrupt_table
interrupt_table:
.rept 256
.quad interrupt_\+
.endr
depends if you use interrupt gates
no
or task gates (I think that's what they're called)
y not
wait
then you can remove that useless cli
won't i corrupt my stack?
huh
idk what this means
success
did it work?
k
lol i should implement uacpi
if i just hard shutdown it hangs the uefi on the next boot
RetarBIOS
reboot again
if that works we have a winner
@grave peak anything advanced my kernel needs for uacpi?
memory allocation
that's it?
no
I wanted to do that many moons ago
but decided against it
because it would be hard to use it in the kernel
gl then
oh shit
i was actually able to cause it in qemu
but only with kvm
so no debugging ๐ข
why can't you debug with kvm?
idk, if i -enable-kvm then gdbserver doesn't stop at my breakpoints lol
all basic stuff
is there any way for me to get -d int logs with kvm enabled
no
and gdb?
yes
doesn't work for me :(
as in, no you can't
fuck
bug doesn't happen in normal qemu which i could debug
bug happens in KVM which i can't debug
i hate everything
well what u call normal qemu is emulation so its not very precise and doesnt do a lot of checking
i mean, it's very likely an isr stack corruption thing but i have 0 idea where i have to look
if it repros under kvm it could be race condition
since kvm is faster by an order of magnitude
or close to that
race condition between what?
maybe u enable interrupts somewhere u shouldnt or have a tiny race window
hm
i'm on a single core right now
but maybe some interrupts are firing where they shouldn't
yeah
wait a minute
I think a minute has passed

everything is broken
maybe I'd be better off completely rewriting the scheduler
it's the worst part of the entire code base
scheduler
like the algorithm?
i don't think the save/restore is what's causing issue
it likely breaks at some weird rescheduling
pain
i believe my interrupt stubs are correct so far
but the rest is flawed somehow
okay it happens during context restore
my scheduler is feeding it garbage, hence the gpf because the CS is wrong
which is good, because i can debug that easily enough
oh man
one trillion dollars to whoever can help me fix this exception
i'm so confuzzled
you should print the error code
okay i helped you fix it wheres my money
jokes on you
it is a page fault
isnt this like a CS/SS gpf
what's hbreak
rewrite the kernel

can i use that with lldb
its just a normal breakpoint
except its different
i think lldb uses them if available
uhh
so no debugger for me
it falls through my break points
details :^)
anyway now we know its either a race
or an x86 quirk
do you have multiple cores?
it's not a race because no smp
ye
can you add like
cmp [rsp+10], 0x10; 1: jne 1b right before iretq
or whatever the offset for SS is
can you do att pls
no i cant att
woe
should be cmpq $0x10, 10(%rsp); 1: jne 1b
okay will try now
lol 10
yeah bro trust
SS should be 0x20, no?
it's the 5th value in the frame
what am i looking for @brisk totem
this happens in user mode btw
ah
i think i know what's happening
somehow i'm writing cs = 0x2b and ss = 0x20
when ss should be = 0x23
i have no clue why this is being changed though
let's see if this is a scheduler issue
oh yes for some reason it's saving a context where ss = 0x20
how is this possible
BTW dont forget uacpi_table_unref as indicated by that warning
Like which
as in, if i get the ptr field of uacpi_table
Well it will be unmapped thats kinda the point
oh
oooooh
okay :(
is there a way to keep using the table for me?
or does that not make any sense
U can keep it if you need it
e.g. the hpet table
The warning is there because its an early reference
Some kernels have special early map mechanisms
i dont
Ofc
oki
In your case its cosmetic then
i'll fix it though for you 
okay terrible discovery, i don't know what this means, but these 2 lines fix the issue
does that mean QEMU is broken?
Stack corruption?
Lmao no
If youre using kvm qemu doesnt really do anything
So if anything its your cpu being broken
yikes
well the thing is
i don't know where the 0x20 comes from
i've printed out all incoming cs and ss values
at some point 0x23 just becomes 0x20???
which obviously triggers the gpf
how
When it gets written to with 0x20
Do u get an inconsistent address if you print out the field address?
wdym by field address?
Printf(&running->registers.ss)
oh i get what you want now
i should watch that thread's context store
well, the problem is that my interrupt stub is being passed that 0x20
which i then write
Hmm
this is so weird
i'm 99% sure this is not my scheduler's wrongdoing
i don't get it
yeah it's obviously the fault of that one hydrogen atom chilling in your cpu
idfk
why would it clear CPL_USER out of the ss
you can even see i pop 0x23 into ss
then it runs the actual code
but gives me back a fucking 0x20
i just noticed, it also seems to set ss = 0 for a kernel thread
this makes no sense
only this field seems to be affected
this obviously doesn't work on real hw
something is corrupting but I'm so out of ideas
@fiery marlin holy shit i figured out why the Framework has such weird behavior
it has a legacy keyboard mode
it just works
wdym?
it's connected via ps2 if you don't use usb
idk
lmao
thats actually quite convenient
yes
I believe the EC firmware is open source, so we should be able to see if its done there
true
btw
the reason there isnt uapi pci helpers yet
i got blocked on uapi_status
idk how to do it since obviously there are generic statuses
but i want per-project ones as well
what have you got right now?
So have projects define their own
how can the api use that though
It doesn't
maybe have something like ELF does for PHDR types
have a range that is reserved for implementations
yes but it still wont be part of the enum
yea that doesn't really matter imo
it matters for type checking
ah i see
i wanted to add like
a define
actually u know what we can do
its a bit hacky but
typedef enum uapi_status {
UAPI_INVALID_ARGUMENT,
...
#ifdef UAPI_DRIVER_UDRM
UDRM_ENUMERATE_STATUS_CODES
#endif
} uapi_status;
enum uapi_status {
UAPI_STATUS_FOO,
...
UAPI_STATUS_PROJECT = 0x80000000,
};
typedef uapi_u32 uapi_status;
uapi_status udrm_do_foo()
{
return UAPI_STATUS_PROJECT | UDRM_FOO_IS_BAR;
}
what about this
implicit conversions of an enum to int are allowed afaik
or make a union 
union uapi_status {
enum uapi_status_generic generic;
enum uapi_status_project project;
};
very non seamless lol
i'd still just do this
assume status = int
so how is user supposed to check the return code
wym
ret.?
i quoted this
the bottom one was a meme
so the user is supposed to do if (ret == udrm_do_foo()) handle_foo_error();?
just make it so that you can define status values in uacpi-libc
i dont think this is about the values themselves?
i thought it was about how to get project specific codes into the uapi enum
if you #define UACPI_STATUS_TYPE you can alias uacpi_staus to whatever you want, and then you gotta #define all the UACPI status codes
why not?
custom types wont pass typechecking by the compiler
why?
because they arent inside the enum
if you #define UACPI_STATUS_TYPE you have to make your own enum with the same items
also thats not how c enums work afaik
something like that yeah
typedef enum x{
a = 1,
b = 2,
c = 3,
} x;
typedef enum y {
d = 4,
e = 5,
f = 6,
} y;
x get_x() { return f; }```
this passes typeck as of gcc trunk
so idk what you are talking about
^
i had problems mapping down uacpi status codes into my ones as well
we want uapi_status to contain driver-specific codes optionally besides the generic ones
its not a mapping problem
hm?
like, the kernel uapi-kernel-defs.h header (set by the kernel) or whatever is something like c #define UAPI_STATUS_TYPE uapi_status typedef enum uapi_status { UAPI_INVALID_ARGUMENT, UAPI_TIMED_OUT, UACPI_AML_DID_STUPID_SHIT, // from uacpi UDRM_YOUR_GPU_SUCKS_ASS, // from uDRM UHDA_NO_SOUND_CARD, // from uHDA } uapi_status;
etc
and then you can make the layout whatever you want
and you can trivially put all the status values in individual headers
and then #include them all together

first of all, that's not that bad
what's wrong with the way ELF does it though
second of all, you can just #include all the header files
DIY uapi
like each driver has a "u<driver>-status-enum.h" header
which is like
all of the entires as enum values
with like enumerations yeah
this idea but manual
except that it gives the os all the control around how things actually look like
what sort of control?
1 instead of 2
also, this lets you set up something like ```c
#define UAPI_STATUS_TYPE EFISTATUS
typedef uint64_t EFISTATUS;
#define UAPI_INVALID_ARGUMENT 2 // EFI_INVALID_PARAMETER
// etc
like status values
what the values are, and what ranges they are in
how would that work with a macro
you make the .h files contain ```c
#ifndef UAPI_INVALID_ARGUMENT
ITEM("Invalid Argument", UAPI_INVALID_ARGUMENT)
#endif
if I have
#define UDRM_STATUSES \
UDRM_STATUS(GPU_SUCKS, 0xDEADBEEF, "You gpu sucks") \
UDRM_STATUS(GPU_SUCKS1, 0xDEADBEEE, "You gpu sucks1")
you can autogenerate it trivially with some python before every commit that changes the list
can we just make error codes 8 byte messages
lol
fucking hell
this is how we got the shitshow that is aml
someone suggesting that 4 byte identifiers are totally fine guys trust
(they are not)
tbh its what allowed us to get somewhat legible aml disasemblies
honestly this + whatever the fuck AML is is why i dont like acpi
aml's not that bad if you ignore it's existence and let infy do all the parsing for you
aml disassemblies right now arent legible at all
unless you are like you
yes but they would probably mangle names for release
FDTs dont have people minifying shit
if they're evil
if they're evil they could do that with aml
fdts dont have bytecode
true
so they dont expose proprietary details
typedef enum uapi_status {
UAPI_STATUS_OK,
UAPI_STATUS_FAIL,
UAPI_STATUS_PROJECT = 1 << 31,
} uapi_status;
typedef enum udrm_status {
UDRM_STATUS_OK = UAPI_STATUS_PROJECT | 1,
UDRM_STATUS_FAIL = UAPI_STATUS_PROJECT | 2,
UDRM_STATUS_GET_A_JOB = UAPI_STATUS_PROJECT | 3,
} udrm_status;
wait why do we need two oks lol
just an example
actually tbh
maybe we dont care about joining them
udrm can return udrm statuses
but it can have a to_uapi_status
also some OSes may want to have multiple "OK" status codes
OK should default to 0
my experience is that dealing with statuses is the most annoying part of uacpi
then you can do !do_stuff()
lol how
big as in detailed or
oh well
it would be much better if you could do proper error propagation
and its also not that hard
alternative: the host OS allocates status ranges
what error propagation
smh infy needs to make a uacpi patch for each kernel to convert uacpi statuses to that kernel's statuses
like, i encounter error X
u can technically return any garbage and it will be treated as an error
turn it into uacpi status Y
and then uacpi gives me back the same status Y i can turn into X
assuming, of course, that i can make my status to be 32 bits
which i cant
because of the wisdom of whoever made uefi
thats super ugly
and make it use any range
make it so that i can #define UAPI_STATUS_TYPE to whatever type i want
yeah should be easy
@grave peak untagged enum maybe?
anyway thats a bit of a tangent
and some sort of UAPI_MIN_U<driver>_STATUS for the start of the given driver's status range
@near tartan i think i have a good idea
so the user has to deal with uapi_status directly only in uapi kernel api right
by returning one of those
so the driver just defines ```c
enum uacpi_status {
UACPI_ERROR1 = UAPI_MIN_UACPI_STATUS,
UACPI_ERROR2,
UACPI_ERROR3,
UACPI_ERROR4
}
we can convert uapi to native driver-specific status type quite easily
even by casting it
but the user calling udrm_initialize can just deal with udrm_status directly and not uapi_status
it may or may not be inheriting from the generic statuses
so my idea is basically dont expose uapi_status to user from driver-specific functions
just do this lol
so that you can have a single set of status codes
instead of 10 different sets
yes
what is the problem anyway? seems like it solves the "how do you reconcile different projects' status codes together" problem just fine
my suggestion is we just dont do that
because there's no need for it
DRM in linux has its own error codes
ACPI has its own error codes
no reason to keep them under the same enum
@near tartan thoughts?
agree
Agreed
i will take that for uacpi yeah
i mean, we should return uapi_status whenever possible, no?
i dont think so, because like if you're calling udrm_initialize why do u care if it returns uapi_status or udrm_status?
it doesnt save u any work by doing that i think?
no
Just make all return a boolean
๐คข
so like, what if uapi_status is only for the actual kernel API statuses
would that work fine
yea
That's what I was initially thinking it would be
i would return uapi_status for i.e. udrm_initialize
hm
unless you want to define _OK, _FAIL, _whatever for all projects that would be the way to go
okay nvm thinking about it, it doesn't make sense
like on one hand it would be nice
but then like we have an enum that has UDRM statuses which can technically be returned from uacpi now
so if u do a switch (uacpi_ret) u have to include those lmao
well u can add a default case but still
its kinda just extra noise
tru
what if i just let you override the statuses completely, like the entire file with your own uacpi_types.h, would that work?
i can make a macro so that its easier to add them all
or would min solve it completely for u
or u probably want _MAX not min if u want to make it 64-bits lol
what would u define this to if you wanted to make it like efi_status
i guess 0xFFFFFFFF + 1
i would define MIN_UACPI_STATUS to 0xc300000000000000
wtf
which is in the oem reserved range
i thought u kinda stopped doing the uefi thing
they are good yeah
everyone using EFISTATUS must also do _In_ and _Out_ otherwise u get kicked out of the efi club
i mean, they are stolen from NTSTATUS
im doing rust
also i dont hate myself
lmao
lol
i'm still stuck on this god damn interrupt frame corruption issue
i have no idea why this is happening
and why does it only affect ss
this shit is really consistent and reproducible as well
the only time i'm setting these values is during thread creation, and with the correct values as well
how the fuck????
please god find me an x86 god that knows what the hell is happening here
skill issue
okay @eternal wharf hbreak seems to work but it's not giving me any info i didn't already have
the values pushed onto the stack are the same that i am reading
i was able to narrow it down a bit though
something about the syscall handler is broken
WHAT THE FUCK
ARE YOU JOKING
--- a/kernel/arch/x86_64/system/arch.c
+++ b/kernel/arch/x86_64/system/arch.c
@@ -36,7 +36,7 @@ void arch_init_cpu(Cpu* cpu, Cpu* boot_cpu)
// Enable syscall extension (EFER.SCE).
asm_wrmsr(MSR_EFER, asm_rdmsr(MSR_EFER) | MSR_EFER_SCE);
// Bits 32-47 are kernel segment base, Bits 48-63 are user segment base. Lower 32 bits (EIP) are unused.
- asm_wrmsr(MSR_STAR, (offsetof(Gdt, kernel_code)) | (offsetof(Gdt, user_code) << 16) << 32);
+ asm_wrmsr(MSR_STAR, (offsetof(Gdt, kernel_code)) | ((offsetof(Gdt, user_code) | CPL_USER) << 16) << 32);
// Set syscall entry point.
asm_wrmsr(MSR_LSTAR, (u64)sc_syscall);
// Set the flag mask to everything except the second bit (always has to be enabled).
you can not tell me i missed this
turns out the amd64 manual is a pretty good place to tell you where these values are actually loaded from 
but thank you qookie for the tip with hbreak
i'm baffled how this even worked to begin with
OH WAIT IT DIDNT
i just never tried running with kvm
smhhh
anyways we are so back
@fiery marlin i'll continue here, but i've got some questions
if i don't need to modify the device tree, does smoldtb need any allocations?
Sure thing - I'm about to head out for brekky so my replies might be a bit slow
yea whenever you can ๐
It does build an internal representation of the tree to move around it easier, so it will need an allocator
ah
But you can use it like flanterm and give it a static buffer, or pass it your own malloc if you have one available
it's not a problem, since i don't use the dtb for usable memory
i evaluate it as soon as i have slab initialized
Ah nice
uacpi benchmark is up to 1.6 mil
where might this be?
huh
how did we get here
what
mlibc on fent
here's a better look
what the fuck do you mean no dynamic section
it's clearly there
i really don't know what could be causing this at all
wild
I know it says section, but is it looking for a dynamic segment?
that's also there
Hmm ok
it works sometimes
i'm suspecting a VM meme
but all i did was replace config variables with defines
yea it was a vm meme
onto the next shit
@neon flicker reference
(fork broken)
can't wait to finish fat so i don't need an initrd anymore
heyy you're running busybox?
can you send me your config? I'm trying to build busybox for linux-mlibc
sure
it's a hassle manually disabling everything that doesn't build
also note the patch
do you just build what you need or do you build everything you can?
i think i have a bunch of things disabled that didn't compile
like init
or linux stuff
for me init compiles but bootchartd (it is also in init/) doesn't? or maybe it just fails before reaching init so I didn't notice
is that menix specific or is it for mlibc
based
I tried porting openrc but couldn't get it to compiled
openrc my beloved
xbstrap with extra steps
#685151198453825566 message
yes
xbstrap if it didn't have any features
the only reason i don't use xbstrap is because i hate yaml to death
do you use a container
for your stuff
i am so extremely tempted to convert to a microkernel
i'm at a point where i could do that without refactoring all too much
nooooooo ๐
why do u want a microkernel?
toy story meme
well the toy story meme is "monolith with limine"
but nothing ever happens so it'll be another nothing burger

but no like if it gives u extra motivation to work on the project thats cool
it will give me extra work
at least
i don't know nearly enough about microkernel architecture
but it sounds so clean in theory
its just
spawn server
epoll()
write(ipc_fd, pls-do-something-i-could-do-via-syscalls-10-times-faster)
we had that thing it was called a modprobe 
i thought it meant isolation from the kernel
u could dynamically link them
that would be fast at least i guess?
the idea in your case that u can at least technically restart the monolith microkernel
since its in userspace
which is fair
it's just that i feel like i've hit a wall of motivation
no
english moment
a wall that stops my motivation
idk what exactly it is
maybe it's all in my head
like the fact that your kernel is a monolith?
kinda, it feels like i'm just reinventing the wheel with EVERY aspect of this kernel
i want to do something unconventional (even if it's stupid)
so do cool stuff
nt clone 
i made the project to learn after all
and not shitty unix clone #487598372
exactly
special respect for people that do nt clones
i don't really want to do a clone of anything
i still want a posix layer at least
yeah like xnu which has both
both posix and nt? 
posix and their own thing
they are not mutually exclusive
come join us it's fun we have turing complete functional macros in yaml
well one reason to use it is that it's an existing tool that (approximately
) works
i mean you should be able to set it up i'm pretty sure
i can ask arsen
make xbbs require managarm abi compatibility ๐
is he around rn?
considering it's 2am he's possibly asleep
but ive no idea what his sleep schedule actually is
utc+1
surely he has an irc bouncer on right?
and yeah he does
he'll see it in the morning then
but yeah xbbs should be hostable on your own and i think the ansible scripts we use for managing the machines are available on gh

