<the_oz>
I dunno about pyspark but I don't know enough about either to be sure. Uhhhh. onyx ekans...
<the_oz>
lodash is the same, makes me squint
<the_oz>
ditto could be both, but that's pokemon for sure
<Ermine>
pyspark is for apache spark
<Ermine>
I bet for vulpix
<kazinsal>
metapod and vulpix are both pokemon
<kazinsal>
shiny isn't *a* pokemon but specifically a signifier for a variant of any pokemon with an alternate appearance
<the_oz>
that's a MTG thing
<kazinsal>
99% sure feebas is a pokemon as well
<kazinsal>
hadoop is in there twice
<the_oz>
I'm useless beyond the original 150
<kazinsal>
gen 5 is when I started realizing nintendo handhelds were getting gimmicky
<the_oz>
I wanna be the very best, no one ever was
<the_oz>
*milking that cash*
<kazinsal>
I'm assuming that the games are profitable because they seem to sell tens of millions of copies at $70 USD a pop despite having been the perpetual stew of gaming for two decades
<the_oz>
>nintendo is team rocket blasting off again
<kazinsal>
but I also have a physical revulsion to paying for nintendo products
<kazinsal>
they've always been kinda shit but when they decided the best response to a rom site was to wage garnish the site's owner for the rest of his life that's when I decided it was morally correct to pirate nintendo games
<kazinsal>
or wait no that was the guy who figured out how to hack modded games onto the switch
<kazinsal>
either way, install ryujinx, fuck nintendo
<sortie>
I completed it with gcc 14.2.0 and binutils 2.43.1.
<mjg>
sortie?
<mjg>
hu.dat
<Ermine>
Is it a plane?
<Ermine>
Is it a bird?
<mjg>
is that a failed onyx dev?
<sortie>
Please everyone. Follow the sign. sortie
<Ermine>
No, It's Sortie!
<kazinsal>
We should probably build a new osdev wiki using modern toolchains...
<mjg>
osdev wiki reimplemented in rust
<mjg>
looking for a VC to fund my startup
<Ermine>
webdev innit
<sortie>
I ... did port php to my OS.
<mjg>
:DD
<sortie>
I *did* get phpBB running on Sortix.
<mjg>
you instantly invalidated your os mon
<kazinsal>
My garbage shit is all just built with a good ol' ./doit
* Ermine
fucks with Xorg
<sortie>
I'm like the king of bootstrapping at this point. The sheer amount of bootstrap, cross, and native builds I do for Sortix has really gotten deeply, deeply out of hand.
<sortie>
The latest volatile build seems to be approaching 12 hours to complete
<kazinsal>
I know for a fact that there's at least one garbage tutorial on the wiki that's attributed to my IRL name from about fifteen years ago and that gives me physical pain
<sortie>
Xorg, the alien invader turned Windowing system
<sortie>
kazinsal: Oh which one did you do? It is a rite of passage for osdevers :D
<sortie>
I did the Bare Bones rewrite a lot of years ago. It gets a lot of eye balls so it is easier to get perfect
<kazinsal>
Some real bad code about string parsing in real mode assembly
<sortie>
oh my
<kazinsal>
And using that to load COM files
<sortie>
I did delete some really bad tutorials a decade ago
<kazinsal>
Yeahhhh, this was like, 2008
<sortie>
oh my
<kazinsal>
Now I'm a respectable person who hasn't committed any code in ages and now works in the system administration field instead of touching code for a living
<sortie>
make[2]: *** No rule to make target '../../binutils/ld/scripttempl/.sc', needed by 'eelf_x86_64_sortix.c'. Stop.
<sortie>
You ever have one of those days
<kazinsal>
Upgrading from gcc 4.x to 10.x
<kazinsal>
Very briefly the gcc folks did the Chrome Version Acceleration thing and then stopped
<nikolar>
?
<netbsduser>
nikolar: gcc 1 in 1986, 2 in 1992, 3 in 2001, 4 in 2005, 5 in 2015, 6 in 2016, 7 in 2017, 8 2018, 9 2019, 10 2020, etc
<nikolar>
ah right, well it's a yearly version bump now
<heat>
sortie, it's largely up to date until it isn't
<heat>
it's accidentally up to date more or less
<sortie>
heat: Sure. I mean that's why I re-reviewed it with the latest toolchain
<heat>
i had a WIP better guide i was writing on the side, with more interesting fucking around
<sortie>
The information there wasn't inaccurate, although I did do things quite differently
<heat>
alas never finished it and i suck at writing
<netbsduser>
at first i was going to blame the low-level virtual machine for this, but it seems LLVM version numbers were actually moderate until 2017 - that's when llvm started racing to high numbers too
<nikolar>
yeah no clue
<nikolar>
bit silly but oh well
<netbsduser>
so it's GCC's fault that this iniquitous, wicked habit of version number inflation has hit the compiler world. thanks, stallman
<nikolar>
lol i don't think stallman was involved in the decision
<sortie>
netbsduser: I feel like Chrome is to blame for this one
<sortie>
They did it, then Firefox too, now clang and gcc
<Ermine>
nobody is going to catch up systemd
<netbsduser>
sortie: without a doubt
<sortie>
Honestly I think it's fine
<netbsduser>
they incepted this deceitful fad
<nikolar>
:)
<netbsduser>
Ermine: systemd cheated
<heat>
bro it's GNOME's fault
<Ermine>
but idk, version number is barely a problem
<heat>
those bastards
<Xyon>
sure but the back edge of that is all the production software firmly sticking with a 0.x version "because reasons" and never bumping it
<Ermine>
heat: wdym
<Xyon>
just use semver and let everyone else figure it out
<netbsduser>
they jamp from version 20 or so to version 190 or so when in one release they decided to sum all the versions of several programs and libraries that had been emrged into systemd
<nikolar>
:|
<heat>
Ermine, tbqh GNOME started that weird version culture in FOSS
<heat>
where they jumped 3 -> 40 and now it's yearly
<nikolar>
they didn't start
<nikolar>
they were late to the party
<heat>
were they?
<nikolar>
they just followed gcc, clang, etc
<Ermine>
well, ff and chrome were using that scheme already
<nikolar>
Ermine: it wasn't yearly
<nikolar>
was it?
<heat>
ff and chrome aren't yearly
<nikolar>
^
<heat>
as for the gcc/clang/gnome timeline, i'm honestly not quite sure how to order those 3, but i had the impression GNOME was the first
<heat>
wait, no, GCC was the first yeah, that makes sense
<Ermine>
isn't that two separate things?
<nikolar>
gnome started it in 2021
<heat>
they keep fucking up the versioning
<nikolar>
while gcc started in 2016 apparently
<heat>
now they're on a "no .0 release" idea
<Ermine>
1) bumping major numer for some reason
<Ermine>
2) release cycle being 1 year or half a year long
<nikolar>
they are related, "bumping major version number exactly once a year"
<nikolar>
and releasing once a year
<nikolar>
(though gcc has x.1.0 and x.2.0 for bugfixes)
jistr has quit [Remote host closed the connection]
jistr has joined #osdev
levitating has joined #osdev
marcopolo2 has quit [Quit: Connection closed for inactivity]
<netbsduser>
what's the point of no .0 release
<netbsduser>
is it just to falsely advertise your software with the cachet attached to .1+ releases, i.e. that it should have the regressions fixed?
<GeDaMo>
Avoiding segfault if you accidentally use the version number as a pointer? :P
xenos1984 has quit [Quit: Leaving.]
levitating has quit [Ping timeout: 255 seconds]
levitating has joined #osdev
levitating has quit [Ping timeout: 260 seconds]
levitating has joined #osdev
nyah has joined #osdev
levitating has quit [Ping timeout: 272 seconds]
jedesa has quit [Quit: jedesa]
levitating has joined #osdev
TkTech has quit [Read error: Connection reset by peer]
TkTech has joined #osdev
jedesa has joined #osdev
min0911 has joined #osdev
<min0911>
I have trouble in using sb16 on virual box, I call the function named "sb16_write" once, but it plays twice. I've checked my code to make sure that there is nothing different from the document.Is the bug from vbox?By the way, it works well on QEMU.
<the_oz_>
history suggests their emulation is flaky
_ngn has joined #osdev
noeontheend has quit [Remote host closed the connection]
pitust has quit [Remote host closed the connection]
vismie has quit [Remote host closed the connection]
yuiyukihira has quit [Remote host closed the connection]
tom5760 has quit [Remote host closed the connection]
nagitsu has quit [Remote host closed the connection]
patwid has quit [Remote host closed the connection]
sm2n has quit [Remote host closed the connection]
xtex has quit [Remote host closed the connection]
exec64 has quit [Remote host closed the connection]
asymptotically has quit [Remote host closed the connection]
kitaleth has quit [Remote host closed the connection]
ddevault has quit [Remote host closed the connection]
whereiseveryone has quit [Write error: Broken pipe]
listentolist has quit [Remote host closed the connection]
lucyy has quit [Remote host closed the connection]
baraq has quit [Remote host closed the connection]
hanemile_ has quit [Remote host closed the connection]
gjn has quit [Remote host closed the connection]
rselim has quit [Remote host closed the connection]
lh has quit [Remote host closed the connection]
ursa-major has quit [Remote host closed the connection]
tommybomb has quit [Remote host closed the connection]
jleightcap has quit [Remote host closed the connection]
listentolist has joined #osdev
yuiyukihira has joined #osdev
nagitsu has joined #osdev
tom5760 has joined #osdev
baraq has joined #osdev
noeontheend has joined #osdev
kitaleth has joined #osdev
vismie has joined #osdev
exec64 has joined #osdev
sm2n has joined #osdev
rselim has joined #osdev
lh has joined #osdev
pitust has joined #osdev
jleightcap has joined #osdev
xtex has joined #osdev
hanemile_ has joined #osdev
patwid has joined #osdev
tommybomb has joined #osdev
whereiseveryone has joined #osdev
lucyy has joined #osdev
ddevault has joined #osdev
ursa-major has joined #osdev
gjn has joined #osdev
asymptotically has joined #osdev
levitating has quit [Ping timeout: 248 seconds]
jedesa has quit [Remote host closed the connection]
jedesa has joined #osdev
min0911 has quit [Quit: Client closed]
Left_Turn has joined #osdev
goliath has quit [Quit: SIGSEGV]
Turn_Left has joined #osdev
Left_Turn has quit [Ping timeout: 246 seconds]
<sortie>
My volatile build went through overnight after 13 hours, I now have a native version of my OS with gcc 14.2.0 compiled natively using gcc 14.2.0 :D
<nikolar>
neato
<kof673>
what is meant by volatile? just curious, there is no wrong asnwer
<kof673>
*answer. unstable/testing?
<the_oz_>
I'd guess not a normal expected supported thing
<kof673>
yeah, i am guessing just dev, just don't know if that is a modern term, don't follow modern stuff :D
<the_oz_>
maybe gcc started spitting dragons
<the_oz_>
woaOAoAoOah that thing is volatile!
<kof673>
one definition is a dragon was a thing that eats another dragon...the dragon book got that right. i would put every compiler that can compile itself like that, minus interpreters maybe :D
<the_oz_>
heh
Left_Turn has joined #osdev
Turn_Left has quit [Ping timeout: 246 seconds]
<sortie>
kof673: It's my experimental build. The stable one is called nightly and is built from the master branch. The experimental build is called volatile (because it may blow up, although it is quite stable, I do fuck up sometimes and this build catches it early) and is built from the staging branch (which unlike master is history unstable, i.e. I use git rebase to perfect the commits before they are merged to master)
mrkajetanp has joined #osdev
<sortie>
I aim to always have the master branch in a releaseable quality state, so that's why I built a lot of infrastructure to test the upcoming commits thoroughly, and only merge once they have proven themselves and passed code review
xenos1984 has joined #osdev
<kof673>
ok sweet. just didn't know if it was a github thing or something new lingo
<sortie>
Every night the volatile build happens on last night's volatile build, rebuilding my entire OS including all 90 ports on itself. It takes 2.8 million processes and 13 hours at this point :)
<sortie>
Yeah that is just me-lingo
xenos1984 has quit [Client Quit]
<sortie>
I wanna rename my branches and so on later on so the branch names and build names align
<GeDaMo>
90 ports?
<mjg>
idk if overloading the word 'volatile' in a c project is the best choice
<mjg>
i mean look at the damage done to the word 'thread'
<sortie>
Honestly there hasn't been any confusion like that
<sortie>
I could perhaps call it unstable instead
<mjg>
's the principle of the thing
<mjg>
unstable/dev/trunk and similar are the usual names
joe9 has joined #osdev
xenos1984 has joined #osdev
xenos1984 has quit [Client Quit]
xenos1984 has joined #osdev
Arthuria has joined #osdev
netbsduser has quit [Read error: Connection reset by peer]
xenos1984 has quit [Killed (NickServ (GHOST command used by xenos19841))]
xenos1984 has joined #osdev
goliath has joined #osdev
X-Scale has joined #osdev
hwpplayer1 has joined #osdev
X-Scale has quit [Ping timeout: 256 seconds]
wantyapps has quit [Remote host closed the connection]
wantyapps has joined #osdev
freshpid has joined #osdev
<freshpid>
yes hello
<freshpid>
mjg: /g/ actually stands for guro, it used to be that board - idk how it became technology
<freshpid>
that's all
freshpid has left #osdev [#osdev]
<heat>
what the fuck
<mjg>
what?
<kof673>
your perfume has attracted a secret admirer j/k
<mjg>
i'm going to unsee this and move on
qubasa__ has joined #osdev
Arthuria has quit [Ping timeout: 260 seconds]
foudfou_ has quit [Remote host closed the connection]
foudfou has joined #osdev
gog has joined #osdev
mrkajetanp has quit [Ping timeout: 248 seconds]
frkzoid has quit [Read error: Connection reset by peer]
frkazoid333 has joined #osdev
joe9 has quit [Quit: leaving]
xenos1984 has quit [Read error: Connection reset by peer]
xenos1984 has joined #osdev
xenos1984 has quit [Ping timeout: 276 seconds]
netbsduser has joined #osdev
Matt|home has joined #osdev
<netbsduser>
i want pointer-sized sleeping rwlocks for a certain, shall we say, "plan" i have in mind for pages
xenos1984 has joined #osdev
<netbsduser>
i've prepared an initial implementation but now i am bothered about priority inheritance
<netbsduser>
i might steal turnstiles from solaris
cookedpotato has joined #osdev
levitating has joined #osdev
<heat>
netbsduser, what do you need the page rwlocks for?
<heat>
keep in mind it's probably the wrong idea :)
<heat>
rwlocks are always wrong (unless they aren't)
<netbsduser>
heat: well for the pages it's not an rwlock that's needed but i want to introduce a general pointer-sized lock anyway and having it be an rwlock will be useful elsewhere
Gooberpatrol66 has quit [Quit: Konversation terminated!]
Gooberpatrol66 has joined #osdev
marcopolo2 has joined #osdev
<heat>
i would assume there's a notable problem with the turnstile stuff
nyah has quit [Quit: leaving]
Gooberpatrol_66 has joined #osdev
Gooberpatrol66 has quit [Ping timeout: 260 seconds]
cookedpotato has quit [Quit: Leaving]
xenos1984 has quit [Quit: Leaving.]
theyneversleep has quit [Remote host closed the connection]
voidah has joined #osdev
GeDaMo has quit [Quit: 0wt 0f v0w3ls.]
goliath has quit [Quit: SIGSEGV]
<mjg>
pointer-sized are a non-problem
<mjg>
solaris did it
<mjg>
freebsd could have done it, but chose not to
<mjg>
the crux is you hash the lock into something external which manages sleepers
<the_oz_>
there was a russian guy 100000k or something that I can't find his blog now
<the_oz_>
but he had SPSC MPSC SCMC MPMC code and was minimal and nice
<the_oz_>
and not explaining linux clones
<heat>
mjg, would not be surprising if that hash table was a performance problem
<mjg>
it is not
<mjg>
if it is a problem, you already have a bigger problem
<heat>
then why would you choose to not do this?
<mjg>
ask linux
<the_oz_>
wait almost got it 1000000 cores ...
<mjg>
i *suspect* they did not do it because they did not have adaptive spinning
<mjg>
aka always go to sleep on a wiff of contention
<mjg>
this is not a problem only if vast majority of the time when you are contended nobody is going to sleep
<heat>
he's the UBSAN/ASAN/TSAN/syzkaller main guy
<the_oz_>
good stuff
<heat>
mjg, hmm if you say it does not matter i might give it a try
<mjg>
heat: it strongly depends on adaptive spinning
<mjg>
and speculative spinning
<mjg>
for writer on reader
<mjg>
if you have that, then indeed it's fine
<mjg>
you may want to read the turnstile chapter in solaris internals
<mjg>
idk if you do prio propagation
<heat>
i do not have writer on reader
<heat>
but WHAT MJG JUS RECOMMENDED SOLARIS INTERNALS
<mjg>
well you gonna need to add it, even linux has it
<heat>
you alright bud?
<mjg>
so the problem is you don't technically know when to gtfo
xenos1984 has joined #osdev
<mjg>
so
<mjg>
you spin up to some magic limit as long as there is no ownership change
<mjg>
and as long as nobody tries to schedule behinid you
<mjg>
hm
<mjg>
wait :D
<mjg>
i just remembered fucking solaris is way too eagier to sleep in their rw locks
<the_oz_>
if spinning exponential backoff plz
<mjg>
you don't want exponential backoff for waiting on readers
<heat>
the problem is mainly that i just dont have a spot in my rwlocks to store a speculative reader
<mjg>
unless with a very small loop count
<mjg>
what?
<mjg>
you just don't denote the sucker
<mjg>
they spin hoping to get lucky
<mjg>
sometimes this is a win, other times it is not
<heat>
what what?
<the_oz_>
you do want exponential if the cache line includes reader and write
<the_oz_>
r
<heat>
you should spin on your own cache line in most cases
<mjg>
we talkin' a case where the lock is read-held and i presume we are waiting for readers to drain
<mjg>
i presume new arrivals got blocked in the name of fairnessss
<the_oz_>
yeah but he wants 32bit here: <netbsduser> i want pointer-sized sleeping rwlocks for a certain, shall we say, "plan" i have in mind for pages
<heat>
they do not
<heat>
i dont do rwlock fairness
<heat>
which _is a weakness_ but boohoo cry writer
<heat>
my point is that adding a new speculative owner field would require a new field
<mjg>
mofo, here is what you do
<heat>
which turbo sucks
<mjg>
uintptr_t loller;
<mjg>
in here you encode the thread pointer to the owner or reader count
<mjg>
thread addr is aligned to enough that you have few bits
<heat>
mon i can have more than 255 readers or whatever
<mjg>
suppose a reader state is indicated with a bit set "readers mofo" and a count
<mjg>
?
<mjg>
this allows about 1 billion readers
<mjg>
which arguably may be insufficient for onyx
<mjg>
and i'm talking 32-bit here
<mjg>
for 64 it's higher
<mjg>
anyway
<mjg>
if you are a spinning writer you set a bit also telling new readers to gtfo
<mjg>
and you are *mostly* there
<mjg>
all with one pointer-sized field
<mjg>
just make sure to have task_struct aligned to at least 8
<mjg>
well 16
<heat>
i dont get it
<heat>
how can you stash 1 billion in bits in a 32-bits _pointer_?
<mjg>
?????
<mjg>
wtf
<mjg>
bro
<the_oz_>
>here I am a lowly user trying to use API to add my reader to this data structure ACK I'M HOMELESS
<mjg>
say you cave out 30 bits for the count
<heat>
dude it's a fucking pointer
<mjg>
dude
<mjg>
it's 4 bytes to count shit with
<mjg>
except for a bit or two you steal for flags
<netbsduser>
the solaris people preferred fairness, it's in their big theory statement
<netbsduser>
i know some big men who are averse to fair locks though
<netbsduser>
they worry about the effect of lock convoying
<heat>
HUGE MEN
<mjg>
see
<mjg>
this is a great example
<netbsduser>
well i wouldn't go that far
<mjg>
you read that description, may think they are the real mofos
<mjg>
but turns out no
<mjg>
their rw locks SUCK TERRIBLY
<mjg>
even if some of the non-obvious choices are sane
<netbsduser>
i did put together a rough first attempt that stashes a pointer serving as the head of a wait queue when the lock is contended
<netbsduser>
you allocate the wait queue entry on the stack when you go to wait and try to atomically CAS it in
<heat>
mjg, i understand it's 4 bytes to count with, that's not the point. i want to stash the speculative reader. how do i do that in the uintptr_t loller while still having space for the reader count?
<netbsduser>
then when someone releases she chases up the wait queue til its end and wakes that thread)
bauen1 has quit [Quit: leaving]
<heat>
i just don't see how it's possible and it's a major sad :(
<Ermine>
"atomically CAS" --- isn't "atomically" word redundant in this phrase?
<heat>
i stash the writer thread * in the (overloaded) counter field with a bit saying "this is totes write mon"
<netbsduser>
the_oz_: i only want 32 bits on the m68k port (my only 32-bit port)
<heat>
Ermine, uhh i think it's not globally atomic in case you don't pass the lock prefix (cmpxchg x86) for instance
<netbsduser>
quite
<netbsduser>
you can ll and sc instead if you will
<mjg>
heat: well then the idea falls apart
bauen1 has joined #osdev
<mjg>
not sure why you would even try that route tho
<heat>
what route?
<heat>
stashing the writer in the counter was the most obvious idea for both debugging and spinning
<mjg>
stashing the reader
<heat>
what would i speculatively spin on?
<mjg>
do you understand the diff between adaptive and speculative?
<heat>
maybe i do not
<mjg>
adaptive == you react to the fucker being on/off cpu
<mjg>
speculative == you have no idea what's up, except the lock is held, so you spin some time hoping it gets freed within time frame you think is fine
<heat>
oh okay
<mjg>
this is where 1. low limit 2. checking if you need to go off cpu
<mjg>
come into play
<heat>
i don't like that kind of spinning but oh well
<mjg>
it's not *great* by any means
<mjg>
but almost always beats not doing it
<the_oz_>
netbsduser: oh I don't know that architecture
<netbsduser>
the_oz_: for shame, it's a serious and important architecture
<heat>
m68k super srs arch
<the_oz_>
I wouldn't doubt it based on where it's been used
<heat>
2024
<the_oz_>
janky ass intel chips frying it's voltage regulators lulz
<netbsduser>
the_oz_: try targeting it
<netbsduser>
i have caused a renaissance in it apparently
<netbsduser>
two OSes on the osdev discord now target it additionally and there's a new OS for amigas called serena that appeared on hacker's news
<mjg>
oh?
<mjg>
> The executable file format at this time is the Atari ST GemDos file format which is a close relative to the aout executable format.
<mjg>
hehe
<heat>
finally aout a good format
<heat>
mjg, >so as is this triviality grew to 3 patches
<heat>
andrew will squash all of that shit
<Ermine>
I think a.out is MINIMAL
<heat>
he appends -fix to the fixup patches
<heat>
Ermine, dude, no dynamic linking, it's so MINIMAL it's great