sfblah
3 days ago
I would be very interested in a writeup that talked about the likely trajectory of Apple's OS if they had bought BeOS instead.
ndiddy
3 days ago
Some former Be employees have commented here in the past saying that Apple made the right decision to buy Next and not Be from a technical perspective, as BeOS had poor code quality and was far behind NEXTSTEP in important areas like networking and printing. They also implemented the OS API directly in C++, which tied them to a specific C++ compiler (some mid-90s version of GCC) due to the ABI getting broken in newer versions. The 32-bit version of Haiku (modern BeOS reimplementation) supports BeOS software, and as a result still needs to be compiled with that mid-90s GCC release.
Beyond that, I'm not sure if buying Be would have fixed the managerial problems at Apple. Would they have been able to add the required features to BeOS to turn it into a production OS without the project turning into another Copland? Would the existing Apple management have slimmed down the massive Apple product line that had dozens of nearly identical models? Would it have gotten rid of dead-end projects like Newton and Pippin? Etc.
diskzero
3 days ago
Former Be person here. Excellent summary. To further elucidate the management issue, some of the Be management went to Palm and they weren’t super effective there either. A fun alternative universe would be Apple buying Be, Apple going bankrupt or eaten by the clones, NeXT powering the internet with WebObjects, Microsoft crushed by antitrust and we are all running Linux using Eazel/GNOME.
ndiddy
3 days ago
Yeah it's interesting how similar what happened with Palm OS 6 was to Copland. They had a working, but outdated OS that had been hacked onto a new platform as a stopgap, then they couldn't get the rewrite meant to take full advantage of the new hardware out the door. Palm OS 6 was at least finished, but it never got used on a shipping device. There's an interesting Reddit post going over how the OS design was fundamentally flawed when combined with the ARM processors that were available at the time: https://www.reddit.com/r/Palm/comments/1422bqy/palm_os6/jn5o...
lproven
3 days ago
Palm at one point was talking to Symbian about licensing the Symbian kernel for the Arm PalmOS.
I wish that had happened... it might have saved both companies.
WillAdams
3 days ago
Best example of how far BeOs fell short was that for a very long while it lacked printer drivers of any kind --- by contrast, not only did NeXTstep essentially get printing "for free" since it used Display PostScript, the implementation of that was such that Adobe demanded a modification to the user agreement limiting the output resolution so that print shops would not be able to purchase NeXT computers and use them as RIPs for imagesetters.
ykonstant
3 days ago
Ah, Adobe, how I want you to burn in an enormous, abyssal hellfire.
tialaramex
3 days ago
Pre-standard C++ is an even worse programming language than C++ 98, but also the big difference wouldn't have been the technology, it was the people. If Apple buy Be Inc they're getting JLG back whereas if they buy NeXT they get Jobs back.
Jobs is what makes or breaks Apple in that critical period. I didn't like him but that's relevant to the success of the company. JLG did not have whatever it was Jobs gave the company.
smithbits
3 days ago
And Jobs brought an entire team of people with him. Many of the top people at Apple got replaced by people from NeXT. Avie Tevanian, Craig Federighi, Bertrand Serlet and many lesser known names came from NeXT. The joke at the time was that NeXT bought Apple for -$400M.
jasomill
2 days ago
I was amused to recall this a decade later when, as a result of Disney acquiring Pixar, Ed Catmull and John Lasseter were put in charge of Disney's animation studios and Jobs got a seat on Disney's board of directors as its single largest shareholder.
diskzero
3 days ago
Yes, the reverse acquisition. Minor correction though, Craig didn’t show up until much later. He missed out on some very tough years and came on when Apple was fully revitalized and printing money. I might even suggest what I consider the decline of Apple software occurred when Avie and Bertrand left and Craig took over.
electroly
3 days ago
I recall the C++ "fragile base class" problem already starting to rear its ugly head by the end. Existing base classes couldn't be reasonably extended without breaking compatibility with existing applications, and the BeOS API was routinely designed in a way that promoted subclassing. e.g. to implement a window, you'd subclass BWindow and fill it with your own subclasses of BView. It's difficult to see how they would have dug themselves out of this hole in the long term. Perhaps eventually they would have needed to ship multiple versions of their system libraries corresponding to each ABI breakage.
diskzero
3 days ago
For release 4, we added private impls with many many virtual declaration placeholders. I still remember the comment in every file: Mmmmmmm, stuffing!
AshamedCaptain
3 days ago
So, exactly like what Mac OS X did with IO Kit. They managed for several decades...
mike_hearn
3 days ago
There were other issues too, no? They went all in on multi-threading of the GUI which is super hard to do well, so apps were often crash prone.
hobo123
3 days ago
I'm not familiar with Be API, but I did a lot of GUI dev in Java Swing back in the day. It's not that hard in principle, you launch whatever background op in whatever threads you like, and any GUI updates have to be done by sending messages back to the GUI event thread (or something like Swing.invokeLater(closure)).
mike_hearn
3 days ago
IIRC BeOS gave every window its own thread rather than have one GUI thread per app. So in effect every app was multi-threaded by default.
bunderbunder
3 days ago
Yes, and it’s been a quarter century or so but this is how I remember BeOS doing it. Every window got a dedicated thread for handling events and GUI updates, and other code would communicate with it via message passing. The OS had a standard message passing system that was pervasive; if I remember right every thread got a mailbox by default.
But it was 90s era C++, so probably that was all just a polite agreement and the reality was that circumventing the message passing to directly call methods on objects that belong to other threads was common, and just as likely to happen by accident as on purpose.
pjmlp
3 days ago
Yes, Be GUI is heavily multithreaded, so core dumps were kind of common, and stuff like Swing.invokeLater(closure) only came later in Swing, after existing for a while as community library, after folks having the same issues in Java GUI applications.
Note that on Android they took an hammer solution, programming patters to invoke such code on main thread, have as outcome that there are either lint compile errors, or platform killing the application, for those flows not verifiable at compile time.
ayewo
13 hours ago
> Swing.invokeLater(closure)
Should be:
SwingUtilities.invokeLater(closure)timschmidt
3 days ago
One minor correction: the Haiku developers worked some magic with GCC binary compatibility and modern Haiku builds are done with a modern GCC yet still preserve the ability to run and interoperate with software built using the old release which is important for preserving the use of commercial software built for BeOS without released source code.
lproven
3 days ago
This is not quite correct as I understand it.
32-bit Haiku can run old Be apps, but must be built with ancient GCC.
64-bit Haiku is built with modern GCC but it is not binary compatible with old BeOS.
ErroneousBosh
3 days ago
Correct, yes. You can run BeOS apps on 32-bit gcc2 builds.
This is a surprising amount of effort to not break compatibility ;-)
timschmidt
2 days ago
You're right and I misremembered slightly. Still ABI magic in my book!
hxorr
3 days ago
Gee, maybe Linux devs could learn something from them...
wmf
3 days ago
It was reported that Apple offered $75M for Be and almost $500M for NeXT and in retrospect those seem like entirely fair valuations. One was a mature OS and the other was a demo of an OS.
diskzero
3 days ago
JLG countered with a $100 million and I thought Apple offered Steve $400 million at first. There was a moment when Apple was just talking to us (Be) and Steve heard about it. Bummed.
diskzero
3 days ago
> They also implemented the OS API directly in C++, which tied them to a specific C++ compiler
We paid Cygnus(?) millions for that. The multiple virtual inheritance needed for MediaKit was a real joy to get working.
AshamedCaptain
3 days ago
I'll note that Mac OS X used a C++ ABI in the _kernel_....
pjmlp
3 days ago
Kind of, you will note that it is based on COM, exactly to prevent ABI issues.
Which is what Windows has been doing since C++ replaced C for most of the systems programming stuff, around Vista timeframe.
AshamedCaptain
3 days ago
Not at all. IO Kit was raw, pure C++, with all the ABI consequences you must deal with (including fragile base class). Just go to see any header of any exported IOKit class to see what I am talking about.
There is no COM whatsoever, no IPC, no IDL, nothing, dunno where do you get that from.
I just find it funny to claim that C++ was even partially to blame for Be's demise, when Mac OS X since its first public release actually embraced C++ for a much more delicate component.
jasomill
2 days ago
Perhaps they're thinking of the CFPlugIn architecture, which is basically COM IUnknown without everything Microsoft built on top of it.
https://developer.apple.com/library/archive/documentation/Co...
pjmlp
2 days ago
> There is no COM whatsoever, no IPC, no IDL, nothing, dunno where do you get that from.
I get that from knowing my way around OS X, naturally it isn't Windows COM, rather shares many of the same ideas,
https://developer.apple.com/library/archive/documentation/De...
https://developer.apple.com/library/archive/documentation/De...
> I just find it funny to claim that C++ was even partially to blame for Be's demise, when Mac OS X since its first public release actually embraced C++ for a much more delicate component.
I think that those that use such argument tend to be on anti-C++ crowd, they forget that NeXTSTEP even had Objective-C++ as well.
AshamedCaptain
2 days ago
This is still completely different to COM in both goals and implementation. If this resembles COM to you, then almost anything resembles COM.
This is just the part how they deal with forward ABI problems, and is exactly the same that Be was doing too, as I mentioned in an above comment: private impl pointers and "preemptive" empty virtual functions (Be calls it "stuffing", OS X calls it "padding").
JKCalhoun
3 days ago
Designed in California has been a very entertaining (video podcast) watch that covers this era:
https://www.youtube.com/@designedinca
(Specifically they talk about Be beginning: https://youtu.be/5IFxwnXASyQ)
walrus01
3 days ago
It would have been a disaster, BeOS was significantly different from a NeXT/BSD-like unix type base that made it relatively easy for software to be developed on MacOS in the 10.0 to 10.4 era. Early versions of MacOS X like 10.0 were clearly just an evolved NeXT with a cute MacOS finder like skin on top.
diskzero
3 days ago
Well, not only former Be but former Finder developer here. The OSX Finder was certainly not a cute Finder-like skin, it was in fact huge amounts of the OS9 Finder source code including a complete copy of a modified Metrowerks PowerPlant C++ framework underneath it all. There was even elements of the old MacApp framework there. It was not a skin; it was a source code behemoth with massive amounts of legacy code.
lproven
3 days ago
That is amazing to read. I never knew. I thought it was Workspace Manager, adapted to feel more Mac-like. There is even a clear line of descent:
1. The Rhapsody developer previews, which are NeXTstep with a menu bar at the top and desktop icons, and a Platinum skin.
2. Mac OS X Server 1.x which has cascading finder windows, an icon view by default, and some other things much like that.
3. Mac OS X 10.0, which I used, or tried to use, as a daily driver, with a broadly Mac-like experience with an Apple menu, but with app names next to it containing global "about" and "quit" options, and so on.
It never did acquire any of the nice stuff that came in with System 7 (e.g. drag-and-drop customisable Apple menu stored in folders in the System Folder) or MacOS 8 (e.g. folder drawers that shrink to tabs).
diskzero
3 days ago
Right. There were several interesting skins and Finder-esque modifications of Workspace Manager. You may have seen a “Beaker” build of OSX with that. The Kodiak pre-release had the C++ Finder that is still the current Finder with PowerPlant replaced by HIView and some code refactored to use AppKit. No SwiftUI though!
Yeah, a lot of those “blue” features never were adopted or came back. The whole spatial Finder concept was lost.
walrus01
3 days ago
I didn't mean that the 10.0 finder was a reskinned NeXT GUI file management application (as you point out, it clearly wasn't and was a huge thing that had a bunch of heritage code), but that the entire 10.0 GUI was a kinda-MacOS-9-like GUI on top of the NeXT bsd-heritage unix-like base. If you were to take a 10.0 system and put it side by side for comparison with the CLI environment perspective, file tree, system libraries with the last NeXTSTEP releases or rhapsody.
diskzero
3 days ago
I hear you. Yes, the 10.0 Finder had swaths of commented out code and missing features that were present in 9. Spring loaded folders comes to mind. They came back at some point.
pjmlp
3 days ago
They probably would fail to recover and be another historical company by now.
If not, desktop computing would be taken over by C++ as main systems programming language, and UNIX like computing relegated to servers.
tialaramex
3 days ago
Outside of the GUI, Be is a very thin veneer over Unix. There is, no joke, a class named "BStatable" which, if you know some Unix, is just stat, because of course what their OS kernel implements is just stat.
In the places where there's something entirely different going on, such as networking in earlier BeOS, it's trash and you'd obviously want to throw it away and do what Unix did - Be were doing so. So a hypothetical turn of the century fruit-flavour BeOS is probably much closer to "Unix with a different UI" than you're thinking. NeXT changed nothing there.
pjmlp
3 days ago
It certainly wasn't on the BeOS R5 CD that was available back in the day, or the whole Kits available for BeOs programming in C++.
The amount of work done by Haiku to provide a proper POSIX userspace support proves the point.
diskzero
3 days ago
A strong BeOS selling point was that it was POSIX compliant. I guess that is what you mean by a thin veneer. But we had to write all that code; it wasn’t like we were running Linux or some SCO or other flavor of Unix. It was a written and rewritten and rewritten multiple times.
tialaramex
3 days ago
I am greatly enjoying the juxtaposition of a comment asserting that obviously BeOS was so far from POSIX that Haiku had to do loads of work to get there and your comment that BeOS was POSIX compliant.
diskzero
3 days ago
Haiku is all new source, so they had to figure out how to get the binaries to run. I am not the POSIX expert, but I think it was just an API guarantee not ABI.
There were several companies that had the BeOS source and that source can be found in the wild. It is speculated that yellowTAB ZETA was based on unlicensed BeOS source code.
pjmlp
2 days ago
If I remember correctly it was bit like how Windows NT did POSIX as well, supported, kind of, hence the need of books like these,
"BeOS: Porting UNIX Applications"
https://www.amazon.com/dp/1558605320
Maybe I am wrong, won't dispute being 100% certain, nor do I have the R5 CD around.