DNS is the most neoliberal shit system that too many have just accepted as how computers work and always worked to the point where I have heard actual landlord arguments deployed to defend it
It’s administered by ICANN, which is like the ideal neoliberal email factory NGO that justifies the de facto monopoly of a tiny few companies with responsible internet government-stewardship stakeholderism, etc type bureaucracy while upholding the right of domain landlords to charge hundreds or even thousands of dollars in rent for like 37 bytes on a server somewhere lol
Before this it was administered by the US military-industrial complex, you can thank Bill Clinton and the US Chamber of Commerce for this version of it along with Binky Moon for giving us cheap .shit TLDs for 3 dollars for the first year
Never forget the architects of the internet were some of the vilest US MIC and Silicon Valley ghouls who ever lived and they are still in control fundamentally no matter how much ICANN and IANA claim to be non-partison, neutral, non-political, accountable, democratic, international, stewardshipismists
“Nooooo we’re running out of IPv4 addresses and we still can’t get everyone to use the vastly better IPv6 cuz uhhh personal network responsibility. Whattttt??? You want to take the US Department of Defense’s multiple /8 blocks? That’s uhhhh not possible for reasons :|” Internet is simultaneously a free-market hellscape where everyone with an ASN is free to administer it however they want while at the same time everyone is forced into contracts with massive (usually US-based) transit providers who actually run all the cables and stuff. Ohhh you wanna run traffic across MYYYYYYY NETWORK DOMAINNNNNNN??? That’ll be… 1 cent per packet please, money please now money now please money now money please now now nwoN OWOW
Okay let’s say I am writing MyReallyCoolLibrary V1. I have a
myReallyCoolFunction()
. You want to usemyReallyCoolFunction
in your code. Regardless if your system works on API or ABI symbols, what a symbol is is a universal address for a specific functionality. So when my library is compiled it makes aS_myReallyCoolFunction
, and when your app is compiled it makes acall S_myReallyCoolFunction
and this symbol needs to be resolved from somewhere.So static linking is when you compile the app with
S_myReallyCoolFunction
inside of it so when it seescall S_myReallyCoolFunction
it finds theS_myReallyCoolFunction
in the app data. Dynamic linking is when it findscall S_myReallyCoolFunction
in a library that’s a file on your machine. Plan9 uses static linking.So let’s talk about this what it means for “code portability”. Let’s say I make an MyReallyCoolLibrary V1 and I have to change a few things, here are alternate universes that can happen:
myReallyCoolFunction
myReallyCoolFunction
but I do not change its behavior, I simply refactor the code to be more readable.myReallyCoolFunction
and I change its behavior.myReallyCoolFunction
and change it’s interface.myReallyCoolFunction
.So let’s compute what this should mean for encoding a Symbol in this case.
myReallyCoolFunction
from V2 can stay declared asS_myReallyCoolFunction
myReallyCoolFunction
from V2 can stay declared asS_myReallyCoolFunction
myReallyCoolFunction
from V2 has to be declared asS_myReallyCoolFunctionNew
myReallyCoolFunction
from V2 has to be declared asS_myReallyCoolFunctionNew
S_myReallyCoolFunction
Now these are the practical consequences for your code:
So now to make code truly portable I must now remove the app refactor pieces. I have 2 ways of doing that.
With #1 you have the problem everyone complains about today.
With #2 you essentially carry forward all work ever done. Every mistake, every refactor, every public API that’s ever been written and it’s behaviors must be frozen in amber and reshipped in the next version.
There is no magic here, it’s a simple but difficult to manage diagram.
I agree that Plan 9 is really cool, but in practice Linux is the height of active development OS complexity that our society is able to build right now. Windows in comparison is ossifying, and OSX is much simpler.
DSL in this case means Domain Specific Language
But here’s the problem with this statement, it unravels your definition of “code portability”. The whole point of “code portability” is that I don’t have to update my code. So I’m kind-of confused about what we’re arguing if it’s not Flatpak style portability, it’s not code portability, what are we specifically talking about?
The formal verification can only reify the fact that you need something called Foo and I can provide it. The more formal it is the more accurate we can make the description of what Foo is and the more accurately I can provide something that matches that. But I can’t make it so that your Foo is actually a Bar because you meant a Bar but you didn’t know you needed a Bar. We can match shapes to holes but we cannot imbue the shapes or the holes with meaning and match on that. We can only match geometrically, that is to say (discrete) mathematically.
I generally agree with this sentiment but I think the capitalist thing defeating better computing standards, tooling, and functionality is the commodity form. The commodity form and its practical uses don’t care about our nerd shit. The commodity form barely cares to fulfill the functional need it’s reified form (e.g. an apple) provides. That is to say, the commodity form doesn’t care if you make Shitty Apples or Good Apples as long as you can sell Apples. That applies to software, and as software grows more complex, capitalism tends to produce shitty software simply because the purpose of the commodity form is to facilitate trade not to be correct/reliable/be of any quality.