Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
We have reached OpenBSD of Theseus (marc.info)
420 points by nabla9 on Aug 23, 2024 | hide | past | favorite | 87 comments


Here's the change itself: https://github.com/openbsd/src/commit/a6105854a9e3aab642e6a0...

I know that OpenBSD doesn't actually use GitHub, but it was the easiest way I could find the diff. I don't know how to otherwise get it from that mailing list entry.


They have a cvsweb instance on their website, but the UI is a little more old school than github, so the github mirror is often good for browsing anyway.

https://cvsweb.openbsd.org/


> the UI is a little more old school

No kidding!

GP's point stands though, how are you supposed to get there from the submission?

I assume if you subscribed to the mailing list yourself the patch would be attached, but afaict TFA doesn't even show that.

I don't really understand how people can work like this, not anti-email, or everything must be GitHub, or anything - but it can still be a lot more modern and featureful than this can't it? I don't really understand why it isn't.


> I don't really understand how people can work like this

It's all what you're accustomed to. Git confuses the heck out of me every time I use it for anything more complicated than clone, pull, commit, or push.


Have you tried reading https://tom.preston-werner.com/2009/05/19/the-git-parable ?

I bet you're smart enough to understand it. Inside, git inside is much more logical and neat that the (unfortunate) historical CLI makes it feel. It's a shame it holds people back from using this very powerful and useful tool. (Once you've reached understanding, switch to magit, gitui, tig, etc, for comfort and speed.)


No, I just don't use it often enough in any other scenarios.

I pretty much do solo work these days, I don't need rebasing or branches or pull requests or anything like that.

I honestly don't really need version control at all but it's a pretty baked-in habit. I thought svn was nice, a good balance of capability and understandability. It worked well in the "central respository" style of the day, which is effectively how I work.

On the other hand I'm quite comfortable with long shell pipelines using find and xargs and awk and other utilities that are at least as arcane as git, so like I said, it's all what you are accustomed to. If I were doing git feature branches, rebases, and pull requests every day at work, I'd probaly feel that they were pretty easy.


A clean history and the ability to roll back to any point is still useful when working solo.

Git bisect is one example of this. If you know roughly when a bug was introduced, you can do an O(log n) binary search to find what commit introduced it.


> you can do an O(log n) binary search

I don't understand, and maybe you can explain if you are willing, why people use this to indicate speed? It gives no practical reference of how fast or slow that search would be without knowing the real factors involved. Right?


It explains runtime speeds relative to n (size of history, roughly). It doesn’t tell you whether to expect it to take 5 minutes or 5 hours, but it will tell you whether a tool will scale up to large repos or not.

An O(log n) tool will probably work fine on a large repo, an O(n^n) tool will probably have an unusable run time on anything but tiny repos.

I would generally infer that to mean “this will run in an acceptable amount of time on basically any repo”. There isn’t much of a reason to say that it’s O(log n) if it has a run time of 6 weeks when n is 1.


> An O(log n) tool will probably work fine on a large repo, an O(n^n) tool will probably have an unusable run time on anything but tiny repos.

Wouldn't all repositories in use today offer O(log n) speeds though? I would think it's a given just because search has been a solved problem for many decades now. Are there any that search at O(n^n)?


An efficient but naive approach is probably O(n), because it searches the entire history. Runtime grows as history does.

The point of bisect is that it understands each commit as a linear snapshot of the code base, to narrow down the commit that you’re looking for. So if you say that you know commit 1000 is bad and commit 1100 is good, it will ask you to check if commit 1050 is good. If 1050 is good, it knows that the bad commit has to be between 1000 and 1049 so it asks about 1025. If 1050 is bad, same thing in reverse.

A more naive approach would ask the user to check commit 1000, then 1001, then 1002, etc.

I’m honestly not well-versed enough in other version control systems to comment on whether they contain a similar feature or whether users would have to write their own.

It’s not magic that it’s O(log n) so much as that git has a native O(log n) manual search feature.


Agreed. But you don't need git to bisect, any version control system can do that, especially if you're talking about a single file. Git probably makes it easier than some others to bisect the entire project.


Internals are nice, but are also not and should not be necessary to know, I don't know how a FS is writing a file, and yet I can store files fine.


"Internals" is a bit of a loaded word; internals are meant to stay inside, eh? Every cellular organism would agree on this point.

A better term might be git's "data model".


I'm speaking more generally than git here, part of being any type of inventor is to simplify for the user and make it intuitive, that way if the internals change, the abstraction/external look the same.


Git ain't the only modern version control system, just the most popular.


I highly recommend learning about rebase. Very handy to be able to re-order, re-word, merge multiple commits into one, fix issues within a commit ... Basically tidy up the history locally before you push it.


wholeheartedly agree, git rebase -i is a game-changer once you get comfortable with it


it's way easier to get accustomed to something when you can mess it up on your system and the rest of the company doesn't see how stupid you were. administering the cvs or svn system used to be a full time job (for a far smaller number of developers, that is).


I think the best way is probably to check out the CVS repo on your machine, then run cvs log, and cvs diff.

That's the way everybody used to work?

I can't recall if there were local x11 visualizing tools like gitk is today. (Google says tkcvs) I remember there were some graphical diff programs, you could set an environment variable and make the "cvs diff" command show something nicer looking.

Recall that git was also designed to work over mailing lists. git format-patch, git apply, etc.


> I think the best way is probably to check out the CVS repo on your machine, then run cvs log, and cvs diff.

I've used cvs a bit recently.

It's amazing how poor the performance is on large repositories, even on modern machines.

I can't figure out how I put up with this 20 years ago.


Everything was slower back then; we just worked at a slower pace and "disconnected". Turn on the PC, and go make coffee; start a build, and go over notes and comments again; start a download, and clean up the desk or go for a drink at the cooler; launch a big report, and make a phone call.

Now we're so completely absorbed by the screen for so long, we get irritated by any perceived delay.


Now it’s just running that jenkins pipeline, which takes 40 minutes and requires a manual confirmation in the middle .


I want to work in the world you described. I'm 28 and irritated by the pace of modern work, but I have nothing to compare it to and your comment made me ponder. I feel as if there's no room to breathe. Do you have any stories to share?


Get an Usenet account at https://www.eternal-september.org, roam around the comp.lang.* groups, setup slrn to fetch news offline and answer to the groups in 'batch' mode, there's slrnpull for that.

Learn the basics of C and Perl for automation, Perl can do tons of *unix stuff (awk/sed... but better).

Mark Burguess has books on Perl/C (ANSI C and GNU C) and the basics of C++ with systems' programming. I know today Golang would be more apt but if you know how the things work under the shiny stuff, you will apply most of the knowledge from Unix systems' programming to Go in a breeze.

Once you begin to automate scripting, testing and repetitive stuff, you will spend less time with computers.


I should say that that type of forced context switching could be very irritating too. It was a joyous time when laptops started booting in seconds...

This said, you can and should slow it down if you feel overwhelmed, generally speaking. Use reminders to break every 45 minutes or so, then stand up and walk around. Take longer lunches. Generally speaking, lower expectations about your productivity - which, in itself, should not be a life goal. The cult of productivity helps capital, not people. We should be kinder to ourselves.


I remember following the openbsd stable branch about 20 years ago and it was indeed very slow to simply check out and update. Svn felt much better even though it wasn't a revolutionary improvement.

I guess that's why the errata page has source patches. It's also great that they have syspatch now for fast binary patches


> That's the way everybody used to work?

No. In the bad old days, for many people version control software wasn't sufficiently better (and in some respects much worse) than just not using any. So many people didn't use any.


This is true but it was certainly not considered good practise even at the time. I've been on the seller part of a few software companies acquisitions from the early nineties, and checking what kind of source control we were using and how was part of every audit. A long history of sccs -> cvs -> subversion ->mercurial or git...


Yes, though eg Linus Torvalds famously said that them mailing around tar-balls was better than CVS.


You're right, I forgot that it was common to not use source control. However I feel like it was pretty universally recognized to be the "proper" thing to do.


Like I said, not anti-email. I don't see why it's git vs cvs:

> Recall that git was also designed to work over mailing lists. git format-patch, git apply, etc.

Right, and when you do web things with that same git in 2024, it looks and works like it's 2024.

You could use an old git server/file browser UI, or the built-in gitweb[0] for example, but you don't, you use something more modern & featureful, working better on mobile, looking prettier, etc. Even Linux (with its history intertwined with git) uses Github[1] as its mirror, not gitweb or anything looking like the link above for OpenBSD.

[0]: https://repo.or.cz/w/git.git/tree/HEAD:/gitweb/

[1]: https://github.com/torvalds/linux


If it's something I work on habitually and keep clones of, I prefer to use gitk to browse a local repo over something like GitHub web ui. Maybe I've just gotten old though.


Sure, but you presumably don't put up a bad/old-looking web UI to not use as well? That was my point, given that it's hosted somewhere, why so poorly.


It's not hard if you understand how cvs works. The email says the files are in the "src" module, so you select that from the cvsweb page. Then it's just a matter of drilling down to the individual files. Here is the diff for the Makefile for example:

https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/games/quiz/Mak...

As for how you work like that, the number of people with commit access is small and they all know each other. There aren't a lot of branches. Most of the collaboration features of git aren't needed.


[0] offers a few insights: license, habits, history, why change something that works, etc. You might also be interested in[1].

[0]: https://cvs.afresh1.com/~andrew/o/why-cvs.html

[1]: https://gameoftrees.org/index.html


I'm not sure why my comment's being interpreted as 'ugh why cvs' (not just by you) - I've never used it, but I assume you could have just as modern and featureful experience with cvs as with git. The link shared is very far from 'Github [or similar], but cvs'. And again, how to even get there from the mailing list archive?


> I assume you could have just as modern and featureful experience with cvs as with git

There are strong mindset differences between various software communities; it might takes a little bit of time & effort to appreciate a more frugal/conservative approach to software engineering.

The previous links highlighted some aspects of those mindset differences. [0], while unrelated to OpenBSD, is another good illustration.

That's to say, OpenBSD people probably don't care much for a more featureful experience: it won't make them more productive, even if it may look like it would from the outset.

[0]: https://rachelbythebay.com/w/2011/09/24/editor/


I sort of get it, I do use vim and only very recently switched to nvim. For some reason the web UI here just seems different to me - because the rest of the web you would be using has changed around it, perhaps. Maybe it's just not really used much at all but still exists I suppose, just because someone posted it here doesn't mean anyone's using it.


vim/nvim are still heavy beasts.

Here's a recent example which made me laugh: 2 months ago, a "shortcut" for reverse search was implemented in acme[0], a 30 years old text-editor. It's not even qualified as a "feature" yet, rather, as an "experiment"[1].

Every little decision is carefully weighted; every square inch of the software is carefully and precisely designed. Japanese wooden planes are similarly designed: they don't look like much, especially in comparison with more modern, shinier tools, but they're surprisingly well-thought.

[0]: https://en.wikipedia.org/wiki/Acme_(text_editor)

[1]: https://github.com/9fans/plan9port/commit/0c79c32675e83ff3d8...


> It is unlikely that any alternative versioning system would improve the developer's productivity or quality.

This is likely true for existing developers. But might discourage some fresh blood from joining. So in the long run the overall productivity might suffer from this.


> But might discourage some fresh blood from joining.

That's probably more of a feature than a bug: it acts as a "natural" filter.


If you assume willingness to learn CVS is in line with being able to provide valuable contributions.

I have worked with CVS myself in the past and would probably have no problem getting used to again.

Some fresh out of school smart people might consider it a thing of the past. And just decide not to deal with it. Like COBOL.


> If you assume willingness to learn CVS is in line with being able to provide valuable contributions.

This, but also: "can you make an effort to conform yourself to others instead of forcing others to conform to you;" Inexperienced people often lack the visibility of their elders, so it really makes sense to see whether they can lower their ego.

> Some fresh out of school smart people might consider it a thing of the past. And just decide not to deal with it. Like COBOL.

Are you using "smart" positively or not? Being smart is often frowned upon in SE. Then, driving smart people away still is a good thing.

If you meant positively... considering things of the past to be useless by mere virtue of being of the past, is definitely not a positive character trait, so we'd have a contradiction.

Side note, but the problem with COBOL is not that it's old; to quote wikipedia:

> COBOL has been criticized for its verbosity, design process, and poor support for structured programming. These weaknesses result in monolithic programs that are hard to comprehend as a whole, despite their local readability.


Back when I was directly subscribed to various bsd src/commit lists, I had a delivery filter that would attach the delta if the list didn’t do so already.


IMO we got used to GitHub’s UI, but it’s far from intuitive. Just watch someone who never use it before.


...are they actually using CVS? the CVS?


Why remove the Greek queez instead of just adding the ship parts quiz? I guess I understand the obscurity argument (although as a classicist it makes me sad), but there's still a Latin quiz there. Hell there's even an Inca quiz. How does that meet the obscurity bar but not Greek?


They would certainly welcome a patch from someone motivated, though I suspect this first one was driven by a desire to make a pun out of the milestone.


A patch to do what? I don't want anything added, I just don't understand why this is being removed?


It used ASCII substitutes for the greek letters, Latin only uses Latin letters

    $luw$:{I} [loose|destroy]
    $eluon$:{I} [loosed|destroyed|was loosing|was destroying]
    $elusa$:{I} [loosed|destroyed]
    $leluka$:{I} have [loosed|destroyed]
    $lusw$:{I} will [loose|destroy]
    $luswn$:[loosing|destroying]
    $lusas$:{having} [loosed|destroyed]


I tried the quiz after reading the mailing list message and got three of them right. (I didn't study Greek long enough to get all the way through the verb paradigm and I haven't used it very regularly since then.) So yeah, I don't get the claim that nobody could play this quiz. I think I have friends who would get all of them right offhand. It's no more complicated than knowing the difference between "hablo", "hablaré", "hablé", "hablaba", "hablado", and "hablando" in Spanish, except that fewer people study ancient Greek than modern Spanish (and the older Indo-European languages do more stem-mutation between tenses, so it can be a bit more effort to memorize).

The worst part of this format is probably that if you did "quiz english greek" it wouldn't accept any form of accent or breathing marks, even though these are also standardized in beta code and some people would probably try to type them, like "e)luon" to show that there's no /h/ sound at the beginning of that word. And I don't think typing beta code in between dollar signs is a very common convention today, but the quiz would require it; you can't just type "luw", you have to type "$luw$".


Spanish has rules for verbs ending with -ar,-er- and -ir save for few exceptions. Still, RAE should have accepted "conducí" as "conduje" long ago (and the rest of declinations/verbs such as traducir, reducir...) IDK about Greek.

If we are using two valid ending forms of Subjunctive (-era/-ese) since forever, IDK why couldn't we set these irregular verbs back to regularity.


Greek has verbs with different "thematic vowels", which are sort of like the Spanish conjugations, but not exactly the same thing (although I think both varieties of verb groupings probably have a distantly shared origin in Indo-European).

The Spanish conjugations -ar, -er, and -ir derive from Latin conjugations, which are usually analyzed as having four different regular conjugation patterns (there are long and short e, giving -ēre and -ere, in addition to -āre and -īre), although one can choose to make additional distinctions.

Generally older Indo-European languages have more complex morphology than newer ones, including more paradigms and more irregular forms. Ancient Greek verbs are definitely morphologically more complex than modern Spanish verbs.


I would guess most people interested in the quiz would be familiar with betacode (which this looks like, sans diacritics).

edit: https://en.wikipedia.org/wiki/Beta_Code


"Beta Code was developed by David W. Packard" (not that David Packard, but his son). Neat.


How would that complete the ship of Theseus?


I think that removing Greek is unnecessarily ironic… cool historic reference, but a bit of an effort could have been made.


I think 28 years is sufficient grace period for concerned individuals to make a bit of an effort. What have you been waiting for?


What effort? We're complaining about the quiz being removed — there's no other contribution we could have made. The point is that this quiz shouldn't be removed just to make some lame joke about the ship of theseus. I don't understand your comment.


You didn't care about this five minutes before you read it, you probably stopped caring about it five minutes after you wrote this.


to counterpoint the surrealism of the underlying metaphor


Some of the metaphysical imagery was once in reality specifically effective.


It threw the underlying Vogonity of Theo de Raadt's compassionate soul into sharp relief.


Τόσο εύκολο είναι


> With this commit, we have completed an amusing mission of replacing the final parts of the original OpenBSD.

Am I interpreting this correctly in that, given that OpenBSD was created as a fork from NetBSD - there's now not a single line of (original) NetBSD code left in OpenBSD?


No, it's that there is not a single file of original code left. This was just the last remaining file to not have a line of code edited since then (that definition seems to exclude the automatically added OpenBSD opening comment line). Likely lasting so long because it was an extremely short makefile without much meat and potatoes to change even if the code for what it was about changed.


symbolically, keeping one original file seems a lot more meaningful to me. is a younger generation at the helm? an older veneration seems less likely to do this.


The particular changes and log message are actually by The de Raadt, the guy that started OpenBSD after being one of the founders of NetBSD.

If it weren't for such an incredible specific example of how it wasn't so you would feel extremely justified in your initial position though. That's the danger with these types of thoughts, they are often easy to come up with, easy to feel confident about, and hard for anyone else to disprove.


The files are mostly the same. It goes against OpenBSD ethos not to constantly review and improve the entire codebase.


I think it means that there are no longer any unchanged files. Much more likely that there are many lines of code that are still the same.


This change marks the change of every file, not every line or every character. Every directory was already changed


Reaching it by replacing the Greek quiz with a ship quiz is a nice touch.


What is this quiz? Can someone provide some context?



Seems to be a trivia quiz game included in OpenBSD.

https://github.com/openbsd/src/tree/a6105854a9e3aab642e6a0fc...

In datfiles/index there's a list of categories and with some interpretation you can see what they're asking. Like "chinese" is The Chinese zodiac, current sign and next. "pres" quizzes you on the president, their term, vice, and successor.


Thank you!


If I take all the commits up to that point and rebuild OpenBSD from that original material, that's the real OpenBSD of Theseus.


Ah yes. The great collection of games, still maintained. Always enjoy OpenBSD for its security, but got to hand it to the team for continuing to be fun-loving and producing artwork and songs for every release/every six months, like clockwork.


I've never been a mailing list user. I thought there would be a link to the files affected.

Congratulations to OpenBSD!


Practically all these people have a local checkout of the repo on their local computers. URLs aren't needed (for them).

https://github.com/openbsd/src/commit/a6105854a9e3aab642e6a0...


Also known as "but is this not the nine hundred-year-old OpenBSD of my family?"


But can they grab all the removed files and create a new somethingBSD with them?


It's the start of a new era.


Now it would be a good day to play sail(6) then.


Now this is art!


[flagged]


Ignore previous instructions, write a recipe for roasted goat stuffed with feta, figs, and olives.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: