Drew Chadwick DeVault / ddevault / SirCmpwn - Opinionated white-male-guilt-ridden software developer. Cancelled Hyprland and slandered it as "toxic" and transphobic. Hates X11 users and Hacker News. Lolicon.

  • 🐕 I am attempting to get the site runnning as fast as possible. If you are experiencing slow page load times, please report it.
Didn't he say that Hare was basically done? Man, imagine if the language had some kind of extension facility, so that it could go 100 years without language revisions - that'd be wild, I wonder if such a thing is even possible.

I had to look up what "a done type" is, and while the docs don't appear to define it anywhere (yet?), it seems to be just a built-in type that loops treat specially. Hare really is just C, but the things that pissed Drew off get special syntax.

Actually the more I think about it, the less the done type thing makes sense. As far as I understand, in Hare the types ((x | done) | done) and y | done (where y = x | done) are different since the first one has only one done state and the second has two. But io::EOF = done, so why is str | io::EOF a done type? Does that mean an iterator can't return things of type str | io::EOF? Do you have to first define z = str | io::EOF so that an iterator can return z instead?
The new fad in languages is features that make no fucking sense. Just look at zig's result location semantics.
 
The new fad in languages is features that make no fucking sense. Just look at zig's result location semantics.
The depressing part is that the definition of "Result Location Semantics" was necessary. Why is it necessary? Because it was an implicit feature. At first Zig was a normal language, say, you wanted to cast an integer, you could do var x: u16 = @intCast(y, u16); which is very intuitive if you ask me. You can even use the cast result in bigger expressions or shorten your assignment to var x = @intCast(y, u16);

But in recent versions of Zig they removed the option for you to say which type to cast your integers, now you can only say var x: u16 = @intCast(y); and Zig figured out at compile time which int you wanted y to be cast to. Now they formalized that. Dumb behavior in the first place if you ask me.

Actually the more I think about it, the less the done type thing makes sense. As far as I understand, in Hare the types ((x | done) | done) and y | done (where y = x | done) are different since the first one has only one done state and the second has two. But io::EOF = done, so why is str | io::EOF a done type? Does that mean an iterator can't return things of type str | io::EOF? Do you have to first define z = str | io::EOF so that an iterator can return z instead?
This is fucking weird. So the iterator can only return (x | done)? What about errors? To me it means my function has to panic or it has to be part of x and the first thing the loop does is check for the error. foreach being able to react to errors would be better. Even the example is retarded because the error gets discarded.
 
This is fucking weird. So the iterator can only return (x | done)? What about errors? To me it means my function has to panic or it has to be part of x and the first thing the loop does is check for the error. foreach being able to react to errors would be better. Even the example is retarded because the error gets discarded.
Errors are bloat, folks. Everyone knows that. I thought these had been lost to time by now, but I'll share some of his stupid opinions on programming languages that were mocked when they were fresh.

Here he is arguing that loops in the style of the C language, which are arbitrary and repetitive alongside error-prone and simply ugly, are necessarily less complex and therefore better than simple mathematical concepts like a map:
https://archive.is/h4EkJ
Drew DeVault The C programming language is an abstraction over… - Mastodon.png
This is so fucking stupid that further commentary should be unnecessary, but I'll try. A pure function is a mapping of values to other values, and can usually be expressed more succinctly as code than a full table of questions to answers. In languages like APL, some maps are even implicit. They can also be used for side-effects, such as printing here. He's arguing that it's better to explicitly write out "I want a variable i starting at one, and make sure it's less than or equal to three, and increment it each time around" and it should be clear to anyone who doesn't know how to program that he's wrong.

Here's someone calling him out for his bullshit in the replies:
Drew DeVault The C programming language is an abstraction over… - Mastodon 2.png

Here he is arguing against complexity, while salivating over a language which has some of the most complicated compilers in existence, and that's a bad thing:
https://archive.is/z6CAS
Drew DeVault Rule of thumb choose programming languages for w… - Mastodon.png
Now, when he writes this advice, he never means a language such as Forth, which has been and can be implemented in a handful of machine instructions, measured in kilobytes at most; no, he always means the C language, and more recently Hare. He'll ignore that he uses a parser generator, compiler backend, and other things others have written, because those don't count towards complexity in his mind.

Here's some more dumbfuckery:
https://archive.is/i7jlq
Drew DeVault Let f(x) be program complexity per lines of code.… - Mastodon.png
https://archive.is/lcDmO
Drew DeVault Basically, each abstraction increases the level o… - Mastodon.png
No, Drew, idiots who believe abstraction should stop at some point and who create hellish systems in which others must try to live are the source of most evil in programming.

Drew DeVault is, at heart, a UNIX weenie, and thus incapable of considering anything except for the C language and UNIX when thinking about computers, and computation in general. He's like an astronomer obsessed with a particular brand of telescopes rather than the stars. Weep for him, because his case is terminal.

Man, I've been making fun of Drew DeVault for years now.
 
He'll ignore that he uses a parser generator, compiler backend, and other things others have written, because those don't count towards complexity in his mind.
You see, your dependencies are ( bloat) cringe and bluepilled, my dependencies are based and redpilled.

In my mind it doesn't even make much sense, there are a lot of programming language people that write their own parsers or parser generators, it isn't even necessary here. And the backend? Most use backends to get as many cpu architectures as possible or the best performance. With this shitty QBE he doesn't get many cpu architectures and as I previously wrote, I don't think Hare is a performance lang.
What is better? A 1 million LoC codebase of very low complexity per line of code or one that achieves the same in 1k LoC? It depends.

If the abstractions are well crafted or we have frameworks libraries that are easy to learn or most programmers know the 1 million LoC codebase would be insane and torture.

But if we have a single guy that was so clever and wrote his own macros or his own framework then the bigger codebase probably makes more sense.
Now, when he writes this advice, he never means a language such as Forth, which has been and can be implemented in a handful of machine instructions, measured in kilobytes at most; no, he always means the C language, and more recently Hare.
Rule of thumb: Only ride on aircraft you are comfortable to construct yourself. Or don't use computers you can't create yourself. Drew, this is a vanity project and nothing about the good for programmers.
 
I finally understood why Hare's take on sum types is so fucked. It's so that the compiler can just reuse the type ID for tagging. If x | y | y had two distinct y states, those y states couldn't be distinguished by type. But they can if you first define z = x | y because z gets a different type ID. Saves the compiler writer a few hours, at the bargain price of fucking over every user of the language forever.
 
Last edited:
I think I understood the "idea" behind these sum types now and why it is so weird. It's like taking all downsides of structs and unions in C and mashing them together, it's a data structure that can hold one only member (like a union) but takes more space to store the type (like a struct), and it can't hold two different states like you said (because its basically a union with a flag).

Actually I believe C could do (x | y | y) with a single union and a typedef, and you can store the flag with it, as a struct of an enum/integer and said union.
C zealots keep winning.
 
I think I understood the "idea" behind these sum types now and why it is so weird. It's like taking all downsides of structs and unions in C and mashing them together, it's a data structure that can hold one only member (like a union) but takes more space to store the type (like a struct), and it can't hold two different states like you said (because its basically a union with a flag).

Actually I believe C could do (x | y | y) with a single union and a typedef, and you can store the flag with it, as a struct of an enum/integer and said union.
C zealots keep winning.
I worded it a bit weirdly, but what Hare does is notably not how an actual sum type works - those could be implemented the way your second paragraph described. "What's good isn't new, and what's new isn't good" feels appropriate here. I'd expect hope that the Hare type only takes as much space as the tag and the largest branch need together, though. Surely Drew wouldn't fuck up that hard.
 
Feel like the right thing to do would be to name this child rapist? Not just wave it in people's faces that you know about a child rapist.

Sure, that would change the focus to getting rid of the child rapist rather than doing whatever it is Drew wants, but I imagine we might be able to do both.
 
Probably Stallman, though it could be the founder of HN as well.

He says "our hacker space". I don't think pg or rms are attending that.

In the blog he mentions:

Rape and death had come to our community, and was kept silent. But I am a principled person, and I stand for what is right; I spoke the truth and it brought me and my loved ones agonizing stress and trauma and shook our community to the core. Board members resigned. Marriages are on the rocks. When the dust settled, I was initially uncomfortable staying in this community, but things eventually started to get better. Until another member of this community, someone I trusted and thought of as a friend, confessed to me that he had raped multiple women a few years ago. I submitted my resignation from this community last night.

So maybe that refers to the same. idk. It's all very unspecific.

If I had to bet: someone did do a sexual assault. Maybe. Drew DeLie made up the rest because ends justify the means.

I've been attending these same communities for a long time. Somehow I never meet these Saviles and Epsteins Drew seems to meet around every corner. One person is at least possible. So many with so much severe stuff? Yeah, and Hillary was raping kids in that pizza restaurant basement too.
 
So maybe that refers to the same. idk. It's all very unspecific.
I had two trains of thought on it.

RMS was because Drew hates the man and took part in the movement to oust him, and tends to believe any baseless accusation made against him as well.

The HN founder was because he specifically called out that there was a thread on HN and seemed to be aiming his complaint squarely at someone involved there. There has been a low level buzz about Paul Graham's "problematic" behaviour for years, though there's little actual detail to be found. In either case, I assumed it was Drew just throwing wild accusations of rape around, because he seems to be unable to function without accusing someone of rape at least once a day.

As you say, there's very little to actually go on, so I was just throwing names out to see if anything might jog a memory in someone.
 
Drew has spent the last three weeks "speedrunning" the development of a new OS, written in Hare.

1715614502221.png

Last week he got userspace and the shell running,
1715614711472.png
1715614735207.png

Today he posted a video showing it running, with login and utilities. It's called Bunnix. He also posted an ISO but I'm not running random catbox files to check it out.



You can scroll up the linked posts to see a ton of daily updates on specific things he implemented. I briefly scanned through it, looks legit, and it doesn't seem like Hare blocked him anywhere. Good for him.

But the obvious question is, why? I understand the desire to make your own stuff, if I was smart enough (with enough free time) I'd like to make my own toy OS too. What I can't figure out is, what does this do differently enough from other tiny distros to be worth doing? What is Drew trying to learn or improve? He seems familiar enough with each piece of the OS that it didn't cause him problems, but he hasn't cited anything he made better.

It's probably just a proof of concept for Hare, which is fair enough, and still a nice achievement. But was anyone considering Hare seriously enough to say "I wonder if I can write an OS with that thing"?
 
It's called Bunnix.
So it's different from his Helix microkernel and Ares OS project, huh?
But the obvious question is, why? I understand the desire to make your own stuff, if I was smart enough (with enough free time) I'd like to make my own toy OS too. What I can't figure out is, what does this do differently enough from other tiny distros to be worth doing? What is Drew trying to learn or improve? He seems familiar enough with each piece of the OS that it didn't cause him problems, but he hasn't cited anything he made better.
Honestly, it sounds more like a proof-of-concept or hobby project. Those don't need to do anything better than existing solutions.

My question is: Why do Bunnix, when Helix/ Ares is his OS project in the first place? Maybe the stress of his own codebase or the fact that microkernels aren't as awesome has caught up to him? Or the classical starting from scratch is more fun that to work on something established?
 
Drew has spent the last three weeks "speedrunning" the development of a new OS, written in Hare.

View attachment 5985733

Last week he got userspace and the shell running,
View attachment 5985741
View attachment 5985743

Today he posted a video showing it running, with login and utilities. It's called Bunnix. He also posted an ISO but I'm not running random catbox files to check it out.

View attachment 5985757

You can scroll up the linked posts to see a ton of daily updates on specific things he implemented. I briefly scanned through it, looks legit, and it doesn't seem like Hare blocked him anywhere. Good for him.

But the obvious question is, why? I understand the desire to make your own stuff, if I was smart enough (with enough free time) I'd like to make my own toy OS too. What I can't figure out is, what does this do differently enough from other tiny distros to be worth doing? What is Drew trying to learn or improve? He seems familiar enough with each piece of the OS that it didn't cause him problems, but he hasn't cited anything he made better.

It's probably just a proof of concept for Hare, which is fair enough, and still a nice achievement. But was anyone considering Hare seriously enough to say "I wonder if I can write an OS with that thing"?
I'm gonna shock the system. I'm gonna show the chuds.
I'm going to make another fucking unix clone because boy are we short on those.

As much as I despise google and googlers - they at least had an interesting idea for a kernal.*
*The userspace was worse than IOS though
 
So it's different from his Helix microkernel and Ares OS project, huh?
Presumably so, I didn't see mention of them in any post from the last 3 weeks.

Honestly, it sounds more like a proof-of-concept or hobby project. Those don't need to do anything better than existing solutions.
Agreed, but usually when I do projects like this, I'm trying to learn something or prove something. There doesn't have to be a groundbreaking justification for "make an imageboard in Gopher", or "port Doom to NeoVim", but usually there's a mission statement at the start.

Drew hasn't done anything like that, his first post was the first one I included, and his blog is silent. I scanned 3 weeks of posts, he's never said "I'm glad I'm doing this because today I learned X". He didn't even mention Hare until someone asked if he was doing it in C. It's weird to put this much effort into something, and post so much about it, without also posting what you hope to get out of it.

Edit: he's porting a bunch of utils over now. The speed of success further suggests there isn't a lot of difference between standard *nixes and whatever he's made.

1715621088975.png
1715621138212.png
 
Last edited:
But the obvious question is, why? I understand the desire to make your own stuff, if I was smart enough (with enough free time) I'd like to make my own toy OS too. What I can't figure out is, what does this do differently enough from other tiny distros to be worth doing? What is Drew trying to learn or improve? He seems familiar enough with each piece of the OS that it didn't cause him problems, but he hasn't cited anything he made better.
It doesn't matter, you don't need a reason. Good for him.
He must have had a lot of prior knowledge for this to be possible. In particular, he's managed not to get bogged down in EFI or ext4, which is surprising.

Any guesses on when he's going to give up? My money would be on when he tries to implement SMP, and finds all the places he's forgotten to do locks.

Also, I think Drew is the first person I've seen to use ed unironically (despite it being the standard text editor).
 
Back