Stop Making Webapps
Web applications have outlived their usefulness. Here's what should replace them.
Web browsers have been doing too much, with too little, for far too long.
Browsers were created to display HTML documents. Formatting was loosely defined to let each host decide how best to present the material. Interaction happened by posting forms. For a time that’s all there was to the World Wide Web, but it didn’t last.
Formatting became more intricate. Media types exploded. Demand for more dynamic behavior led to the introduction of a scripting language. JavaScript was intended to do simple things like animate menus, but a legion of budding web developers decided to treat it as a general programming language. Soon, web development meant stuffing huge amounts of unstructured JavaScript into web pages. Traditional tools like compilers and debuggers became, seemingly, unnecessary.
Today we’re in a terrible position. Users expect to run extremely large applications in their web browsers, which have become incredibly complex to accommodate them. JavaScript never matured into a full language, so we’ve had to build new languages like Angular and React on top of it. Web applications are hobbled by a myriad of performance and security restrictions that don’t affect regular software. Web developers fight a constant battle to ensure their apps remain compatible with all of the different browsers, operating systems and form factors people use.
Why do we put so much effort into making web applications work, when every computer already has a native operating system and a set of tools for developing real software?
There are two reasons. One is the “write once deploy everywhere” idea. Why make different apps for Windows and Mac, iPhone and Android, when a web site will work on all of them at once? Managers and bean counters love this concept. Developers know better: in all but the simplest of cases, you’re going to put more effort into building the universal web application, and it’s going to do less. Sometimes less is OK, but if you want to build software that takes full advantage of a computer’s resources — something that can use all the hardware, consume arbitrary network services, read and write files — you’re out of luck. Your web application isn’t going to connect to a heart rate monitor, drive a multichannel audio card, or run an LLM on the user’s GPU.
The other reason is friction. Software has to be installed. We used to install it from disks purchased at retail stores or shipped to us. Now we can install software over the internet, but it’s not as easy as opening a web page. I blame the arbiters of the operating systems for this situation. Apple, Google and Microsoft could have made installing software as easy as typing an address or clicking a search result. Users need never have known the difference. Instead, they run app stores that require you to log in with a credit card. You go through a “buying” process, with multiple opportunities to bail out, even if you’re not actually being asked to spend money. They put a burden on developers, too, forcing us to follow rules and seek approval for our apps to be listed. I cannot count the number of times I’ve heard, “people don’t want to install an app”. If it doesn’t simply appear on their screen, they can’t be bothered. I’ve had customers pay me to write mobile apps and pay me again to convert them to web sites, just to eliminate this barrier.
How do we fix this?
We must invent something: a new kind of browser, application-focused, that can host powerful software on multiple systems with little or no installation overhead. Think JVM, except with a modern UI layer that supports touch screens and media devices, location services and bluetooth radios, accelerometers, push notifications, payments, and everything else we need to build the kinds of applications we want. This browser would not simply load pages and support scripting as an afterthought. It would load and run compiled code in a high performance, safe, cross-platform way.
What languages should it support? What programming paradigms? I won’t pretend to know. Better minds than mine will need to collaborate on the specifics.
I do know that we must design and build it ourselves, as a community, because the large tech companies won’t help. Whether as users or developers, Microsoft, Apple, and Google do not have our interests in mind. Each of them clings to the idea that they can win market share by convincing developers to write solely for their platform. Never mind that this war has been happening for 40 years, and it’s never going to end. Perhaps it is an inevitable byproduct of the free market system, but that’s a topic for another essay.
I take no pleasure in reaching these conclusions. I learned iOS development the same year it became possible to write apps, and I still prefer it to anything else. If it were up to me, everyone would have an iPhone and a Mac and all I’d have to think about is Swift, plus whatever UI model is currently in fashion. But few can make a living selling software on only one platform, so this isn’t a commercially viable plan.
It’s been more than 30 years since the World Wide Web became a household service, and I have no problem with the continued development of web browsers and web sites that fulfill the browser’s original mission of document distribution.
Instead, I picture a world in which the web browser lives alongside a new platform designed exclusively for application development. I imagine a future in which most software is developed for this platform, running freely across every OS and device type. There will be no CORS restrictions, no reams of third-party abstraction layers, no arbitrary restrictions on the use of system resources. Developers who currently code in Swift, Kotlin, c++, Python, c# or Java will be able to switch to this new kind of programming without abandoning everything they’ve learned. Teams won’t need to split their resources among two or three different product variants and customers won’t pay two or three times to get the same application developed.
As for the tech giants, let them keep their proprietary tools for developing system utilities and drivers or the occasional platform-specific application. But make it obvious that they will have to support the universal programming platform if they want to keep selling machines.
Let’s make this a reality and start working on it now!


