Two years after that Joel Spolsky - former PM on the Excel team - wrote his famous essay "How Microsoft Lost The API War" which predicted everything would eventually be rewritten as web apps. Gmail had launched two months earlier.
https://www.joelonsoftware.com/2004/06/13/how-microsoft-lost...
So, even back then the trend was clear. The Windows team systematically dropped the ball / refused to believe the ball existed, and was outcompeted by much smaller teams writing browsers.
Oh, they had a very good go at killing the web or trying to tie it to their existing APIs: the IE6/ActiveX era.
I'm not really sure what they could have done, though. Other than modernize away from WinForms properly; they have repeatedly dropped the ball on UI frameworks and failed to modernize all their own stuff.
Conversely, Apple appear to have "won" despite (because?) completely ditching all backwards compatibility for their APIs on multiple occasions.
I think if they'd done that they'd have concluded:
• Devs pick the web because it means deployment+start can be one click on a hyperlink, the browser will also update your software without any prompting of the user.
• Sandboxing really matters because it's what enables the former.
• Guaranteed and easy server connectivity really matters.
• High level scripting really matters.
So, they could have e.g. tried to make a sandboxed version of Visual Basic in which the P-code you downloaded was used just for UI, with all other serious logic on the server. Maybe even using a properly client/server variant of DCOM to provide client<->server calls. Basically a kind of web browser like thing but on top of the MS stack instead of HTML. Devs would probably have found that pretty compelling.
ActiveX was the closest attempt but it didn't fit the bill. It wasn't sandboxed in any way, and ActiveX controls took forever to download because they were all native code. They definitely weren't high level and you didn't get any kind of convenient server connectivity out of the box either. Then BillG decided to do .NET and I guess code sandboxing got sucked up into that project, the Windows guys were somehow allowed to reject the whole .NET concept, and deployment wasn't sorted out for many years. Kernel level native code sandboxing wasn't possible on the Win 9x codebase and is still pretty ropey even in Win 11, so that was also out.
Apple didn't really win against the web, and their API is largely backwards compatible to the start of OS X. Also, the initial versions of OS X did contain support for both running old MacOS Classic apps in emulation, and also porting them to the new APIs whilst minimizing the size of rewrite required (Carbon). So their backwards compatibility isn't too bad.
What I heard was that the higher-ups pushed .NET as a core part of the OS pretty hard during Longhorn, and it failed, leading to the Longhorn development reset around 2004 or 2005.
Disclosure: I was on the Windows team at Microsoft, but long after all of this happened (2017-2020), and I never learned about Longhorn history from the inside. I don't remember sources for what I said above, though I think Herb Sutter has talked about it.
Also, Teams isn't written in 1999 JavaScript.
Apart from standardizing some things (doesn't hugely matter for electron since it's the only target) and getting async - what has really changed?
Check out:
https://compat-table.github.io/compat-table/es5/
https://compat-table.github.io/compat-table/es6/
https://compat-table.github.io/compat-table/es2016plus/
https://compat-table.github.io/compat-table/esintl/
---
Not to mention that fact that Teams is actually written in TypeScript (tho compiled to JavaScript).
"It's not a different language, because you could have another language compile to it."
Most of the "modern JS" stuff was based on that idea. Teams was released before even the modules existed in the browsers.
I dunno how relevant that is: 1999 JS performance is closer to 2024 JS performance than 2024 JS performance is to 1999 C++.
IOW, just because 2024 JS might be faster by a factor of 2, doesn't mean it's faster at all[1] than the equivalent program written in native code.
[1] Maybe it is - I haven't checked benchmarks because programming language benchmarks have almost no correlation to reality when you use the language in a program, because the program is not doing 25k calls to the same function in a while loop.
It'd be in a non-native language, like C#.
JavaScript is faster than you think. Miles ahead of Python, Ruby, Perl, PHP. Not too different than C#/Java (especially if you consider 2x to be effectively the same) [1].
True; C# is the most obvious choice for Teams.
> JavaScript is faster than you think.
I'd be very surprised.
> Miles ahead of Python, Ruby, Perl, PHP.
Depends on "miles" - I think it is within the same order of magnitude as all of those. If it's far off from being in the same order of magnitude of those, I'd be very surprised.
> Not too different than C#/Java
I don't think so, not for idiomatic usages anyway. Java and C# are pretty damn fast! ISTR that Java/C#/Go are in a different order of magnitude from JS, Python, PHP, etc.
(The link doesn't work, btw)
https://benchmarksgame-team.pages.debian.net/benchmarksgame/...
And Java/C# is nowhere even close to an order of magnitude faster than JS.
https://benchmarksgame-team.pages.debian.net/benchmarksgame/...
The better showcase would be complex application code where JS cannot keep up with .NET or JVM no matter how much you optimize V8 due to dynamic typing and even simplest operations like property access needing inline caching and guards.
[0]: https://benchmarksgame-team.pages.debian.net/benchmarksgame/...
déjà vu all over again
(Or would C# aot and GraalVM be more to the point?)