I don't think this applies in most situations. If you have been part of the original core team and are rewriting the app in the same way, this might be true - basically a lost code situation, like the author was in.
However, if you are doing so because you lack understanding of the original code or you are switching the stack, you will inevitably find new obstacles and repeat mistakes that were fixed in the original prototype. Also, in a real world situation, you probably also have to handle fun things like data import/migration, upgrading production instances and serving customers (and possibly fixing bugs) while having your rewrite as a side project. I'm not saying that a rewrite is never the answer, but the authors situation was pretty unique.
> if you are doing so because you lack understanding of the original code
As I understood it, the key point of the article is that the understanding is the value. If you don't understand the code, then you've lost the value. That's why rebuilds by new folk who don't understand the solution don't work.
1: https://www.joelonsoftware.com/2000/04/06/things-you-should-...
Understanding doesn't have to come from "being part of the original core team". Although if you aim to be feature-complete and interface-compatible, I'm sure it helps an awful lot.
I lost that battle and ONC+ was locked behind the wall until Open Solaris 20 years later. So many people in tech cannot (or perhaps will not) distinguish between "value" and "cost". Its like people who confuse "wealth" and "money". Closely related topics that are fundamentally talking about different things.
This is why you invest in people and expertise, not tools. Anyone can learn a new toolset, but only the people with expertise can create things of value.
[1] So still licensed, but you couldn't use the trademark if you didn't license it and of course there was no 'warranty' because of course the trademark required an interoperability test.
Microsoft doesn't open source Windows. A big enough company could fork it and offer enterprise support at a fraction of the cost. It would take them years to get there, and probably would be subpar to what large Windows customers get in support from Microsoft. Yes I know y'all hate dealing with Microsoft support - imagine that but worse. Still, the company with the forked distro would definitely take a bite out of Microsoft's Windows business, if only a small one.
That has not been shown to be the case. There is ample evidence that other companies would run this 'off market' or 'pirate' version, and zero evidence that if those choices had been unavailable that they would have legitimately licensed Windows.
You are making a variant on the 'piracy losses' argument which has been shown is simply a pricing issue. If you "ask" for more than your product is "valued" then it won't be purchased but it may be stolen. And if you make it "impossible" to steal you will reduce its value to legitimate customers and have zero gain in revenue from those who had stolen it before (they still won't buy it).
The "value" in Windows is the number of things that run on it and the fact that compatibility issues are "bugs" which get fixed by the supplier. We are rapidly reaching the point where it will add value to have an operating system for AMD64 hardware that is overtly governed (not Linux or FOSS) which allows you to get a copy of the source when you license it, and has an application binary interface (ABI) that other software developers can count on to exist, not change out from under them, and last for 10+ years.
As Microsoft (and Apple) add more and more spurious features which enrich themselves and enrage their users the "value" becomes less and less. That calculus will flip and when it does enterprises will switch to the new operating system that is just an operating system and not a malware delivery platform.
Not understanding this part, aren't Linux distros achieving this already without licence restrictions and various levels of stability depending on the distro selected?
A huge amount of enterprise tooling is now being run on the cloud through the browser or via electron - for a large number of businesses, their staff would only need the equivalent of a Chromebook style GUI to perform their work.
Native software is still essential for a small % of users.. is this what you're suggesting needs to be solved? A single alternative open source system (OS or VM?) that the software dev company can target.
No. Ask yourself, if I install distro <pick one>, can I run a complex binary from 2015 on it? To pull of that kind of stunt you need to ensure you have control over changes not only in the kernel, but also in all of the associated user libraries and management tools. There are change paths for everything from how daemons get started to how graphics are rendered and sound is produced that are incompatible with themselves, much less other versions from 10 years ago. That is not a support burden that someone selling a specialized piece of software can easily take on. It makes their cost of development higher and so their price higher which loses them business.
Thanks to Wine, it’s the most stable API/ABI Linux has!
I’m kind of joking, but the main issue probably lies with the libc rather than with Linux itself.
The only way to change that is to start with a new social contract which is "You pay us to license a copy of this OS and we'll keep it compatible for all your apps that run on it."
Firstly, there's the obvious "all the apps you run on it". Your new OS has no apps, and even if a few emerged no business really wants to commit to running on a new OS with only a couple apps.
I mean, if you want a stable OS there's always BSD, or BeOS or whatever. Which we ignore because, you know, Windows. (And I know it's fun to complain about ads on windows and Microsoft in general, but there's a reason they own the market.) OH, and business users don't see the things folk complain about anyway.
Personally I have utilities on windows that were last compiled over 20 years ago that still run fine.
Secondly no OS operates in a vacuum. You need to store data, (database) browse the web, communicate, secure traffic and so on. Those are very dynamic. And again (by far) the most stable place to run those things is Windows. Like Postgres 9, from 15 years ago, is still used in production.
Of course it's also possible to freeze any OS and apps at any time and it will "run forever " - or at least until the version of TLS supports dies.
So no, I don't believe there will be a new OS. Windows Phone died because there were no apps. Your new OS will have the same problem.
An astute reader would find I am not in fact making that argument, and I suspect if we got into the weeds with it, we would find we agree with each other.
This is a key reason it’s so important to knowledge-share within teams. For all kinds of reasons, people move on, and any knowledge they hold without redundancy becomes unavailable.
Also a good reason why commenting can help: then maybe a bit more of the value IS in the code.
Exactly. Code is cheap to write. Even a lot of it. What's hard is understanding a problem thoroughly enough to model a correct solution. Once you have that, you've done 90% of the work.
It doesn’t have to happen, and with some effort can be somewhat avoided, but it’s the default outcome. Depending on your goals and career aspirations, this can be a wonderful thing, or it can be a bit of a curse.
Notice the critically important difference of recreating an existing design, vs using the rewrite as an opportunity to experiment on the design and the implementation (and the language, and the ...).
Vetting a new design takes time, consensus, and subjective judgement. Re-implementing an existing design is laser focused and objective.
Edit: case in point, Sybase created the SQL Server. During one of the due diligence of business partnerships with Microsoft, Microsoft “borrowed” a copy of the source code (not sure about the details). After much legal wrangling, Sybase was forced to license it to Microsoft due to the loss of leverage. Microsoft released it as MS SQL Server. It took years and years of work for Microsoft to finally replace the code piece by piece.
Our experiences apparently differ. I've worked on dozens of large scale systems and due to the lack of up to date documentation and comments in the code the developers have had to re-engineer most of those details in order to make even minor changes as the requirements evolve over the years. The code might work, but the knowledge of how and why is generally lost to entropy.
There's a joy in rewriting software, it is obviously better the second time around. As the author says, the mistakes become apparent in hindsight and only by throwing it all away can we really see how to do it better.
I also sketch (badly) and the same is true there; sketching the same scene multiple times is the easiest way of improving and getting better.
Efficient processes require a lot of thought to develop and implement. When a badly-run organization acquires a good piece of code, it will eventually start to stagnate and bloat.
Their point was the same as this article with a shorter time window. Knowing what to do, not how to do it, is 90% of the battle.
But that is counterintuitive to the lay observer of software. They think they know what to do, because they’ve got ideas, but feel inhibited because they don’t yet know how to achieve them. So they assume that their immediate hurdle must be the hard part of software development.
I would have gone back to fix my python code, but I'm happy with the rewrite in go (runs faster, has far more test cases, which allowed me to add more functionality easier)
And yes, the rewrite took me ~50% of the time, and most of that was due to it being an exercise in learning go (including various go footguns).
Insightful synthesis around even a single form isn't exactly common. The art of managing test suites for instance. An insightful synthesis of many forms... I've not yet seen.
There is a lot of value in code. It works in prod. It is continuously regression tested by its load, so when there is a problem you figure out a tiny delta to fix it.
If you rewrite from memories you'll get a lot of bugs you need to fix again.
Code being worthless and "must keep PRs small" seem to be in tension.
I bet he did it recently and that undermines his whole thesis. He would need to have redeveloped it before 2000, to support his argument. I would also suspect he only made a toy 80% working example and that it only needed the other 90% to be completed (e.g. administrative or developer focused features). I'm pattern matching with other developers I've heard say similar things.
Information that articles ignore is often critical; moreover we judge articles based on the meta-decision of "what critical information was ignored". The article severely misses some key points.
A better example that a developer is more valuable than the code: when a key member of a company goes off and greenfield develops a competitor that wins (but still not an independent measure due to confoundering effects).
In some situations I would agree with the thesis, but unfortunately the article poorly argues the point.
https://pages.cs.wisc.edu/~remzi/Naur.pdf
Paper discussed multiple times on HN, notably:
Yeah, please never manage a software team. Thanks.
You are putting a pretty basic CRUD app in Fort Knox. We're not building anything super proprietary or patentable, it's not rocket science. Anyone could rebuild something roughly analogous to our app in a matter of weeks.
The code isn't the value. Our connections, contracts and content are our value. Our people and our know how is the value.
The code is almost worthless on its own. The time and thus money we've spent has been far more in finding and fine tuning the user experience than in "writing code". These are things exposed to anyone who uses our app.
You could genuinely email all our code to our direct competitor and it wouldn't help them at all.
I feel like you need to be careful with this. Ive seen a lot of times the rewrite ends up being more complicated then the original, even stuck in some rewrite hell and never takes off. I think its called the "2nd system effect"
Liftyee•5h ago
mncharity•3h ago