This is the reason I like SumatraPDF. It has an old-fashioned user interface, a rather limited set of features, but boy it opens fast. I wish there were more apps in that mold.
In general Linux seems pretty snappy. I like evince, which is not particularly svelte (but it does color inverted rendering and reloads your PDFs when they change on the disk, so it is nice for writing at night).
He mentions Linux in the blog post. But then goes off on a tangent about cross-platform programs. I think he must be primarily a windows guy or something? In general cross platform programs suck, it is well known, so everyone avoids them.
I recently-ish switched to Ubuntu and tried to give their weird gnome a try, but it just became a nightmare of addons and then the addons started conflicting or something. Anyway I’ve come to the conclusion that I’m not smart enough to use a desktop environment.
For my laptop, I’ve used i3, polybar (to get pretty bar at the top), rofi (a fine launcher), autorandr (detect and switch to my monitor and turn off laptop screen when I plug in), and… a random Arch Linux forum post to get automatic accelerometer based screen rotation going.
I bet there’s a fancy tool out there but this script seems to work after a little customization, and it is only a couple lines, so it can be understood!
That’s interesting. So do you start the programs floating, and then put them in tiling mode sometimes? Or just avoid tiling completely? (It seems like that would be giving up a lot of the specific strengths of the window manager… but of course if it works for you, it works!)
I use the multiple desktops feature a lot, though. Some programs are pinned to a dedicated desktop and run all day. Others I start in (or move to, later) a numbered desktop, and switch to them by changing the desktop. Often, most of the desktops contain only one window.
I once used i3 and sway the right way, of course. I guess I had one too many of those programs that were not designed to work at arbitrary window sizes, added the above rule and called it a day.
While I haven't used a full DE in years, if you want snappy going with a lightweight WM wouldn't hurt. I use StumpWM but I haven't had any issues with responsiveness using i3, awesome, or XMonad.
I use a Linux desktop that is extremely snappier in comparison with how popular distributions like Ubuntu or Fedora feel, at least in their default configurations.
However, I have never analyzed which are the exact causes, because my configuration has a lot of differences and I am not sure which of them matter.
I suppose that it is important that I use neither Gnome nor KDE, but XFCE. Even so, some of the applications that I use are intended for KDE or Gnome, so they use the corresponding libraries, and I do not know if these have any reason to be more responsive under XFCE than under their native desktop environments.
I prefer to use a completely empty desktop, without icons or toolbars and having as background a neutral gray. I launch applications by right click on the desktop and I restore minimized windows from an auto-hidden taskbar.
I take care that there are no active services/daemons besides those that I really need. I do not use systemd or anything associated with it. I have stopped using swap memory two decades ago (but I equip all my computers with generous amounts of DRAM, to avoid out-of-memory situations; my oldest computers have at least 32 GB and nowadays I would not buy one with less than 64 GB).
I use only 4k monitors with 30-bit color, so using lower resolutions is not needed for a snappy GUI.
I use the proprietary NVIDIA drivers or the Intel drivers on computers with the integrated Intel GPU. I use a customized Linux kernel, but I doubt that this can have any influence on GUI responsiveness, even if it ensures fast boot times. I do not use Wayland and I doubt whether it is the right replacement for X Window, because its initial design was very flawed, even if some of the original defects have been corrected meanwhile.
For viewing PDFs or EPUBs, I use MuPDF, which is much faster (especially on startup, which is instantaneous) than the other viewers that I have tried. It has some limitations, so I also keep around other viewers, e.g. Okular, for the cases when I need a feature not provided by MuPDF. As file manager, I use Xfe.
Thanks for all the tips, I’ve been looking for a good pdf viewer on the Linux side, ironically, Preview is one of the hardest things to replace for me from the Mac.
Personal anecdote: my laptop (6 years old and outdated long before it was manufactured) was thrashing with 99% ram used and disk bandwidth maxed out due to a combination of a 100-tab Chrome monster and doing pacman -Syu on my Arch Linux WSL (I think it might be fixed now, but some time ago WSL file cache would eat all your Windows ram). After accidentally clicking on a pdf document Sumatra somehow still managed to open it in roughly 100-200ms.
I think it might be the only Windows program where I've legitimately been surprised by it's speed.
"macOS ... the desktop switching animation is particularly intrusive, oh god how I hate that thing"
Why oh why won't Apple let you turn this off? It annoys if not nauseates so many people.
This is is just one example, but indicative of their mindset, why I dislike Apple, and use linux whenever I can. It's such a calming joy to switch instantly between desktops without the rushing-train effect.
The desktop switching animation is the reason why I don't use Spaces at all. I just can't force myself to "be along for the ride" every time I switch, which I might want to do very often.
There's one situation where it's specially terrible: screen sharing. When I'm on a Zoom call, and somebody is sharing their screen, and begins switching spaces... I get dizzy (and the streaming compression goes crazy).
Problem with that is that it's global. It can even affect websites if they use a media query for it. I'm ok/enjoy the other animations (I rarely see them, but appreciate when they happen), the only animation I wanted to disable was the desktop switch one.
It was once possible I think, but it seems that's impossible on new versions of macOS. Spaces are unusable because of that as a programmer. I'd love to have a terminal in one space and browser in the other, but the delay in switching between both is very noticeable and considering how many times I'd do that it'd probably take minutes off my day.
one workaround I use is not to use Spaces but custom Alfred hotkeys for most popular apps that you often switch such as: iterm, browser, xcode, vsc, file browser + rectangle.app for shortcuts to maximize/minimize app (without default animations). Takes some time to train muscle memory though - I use cmd+ctrl+(j or or k or l or ;) to switch between most frequent apps. I also use F1 as hot key for iTerm (quake style) and F2 for Dash.app
Yes, it is global. Even running `matchMedia("(prefers-reduced-motion)")` in the browser console returns true. I see no way of disabling reduced motion only for Safari either.
That being said, if you do decide to use spaces, I want to point out a MacOS setup that would help you to keep apps on different spaces and have an experience (slightly) closer to i3wm and other window managers.
First, you should create 10 spaces. Then go to Settings -> Keyboard -> Keyboard Shortcuts -> Mission Control -> Expand the Mission Control dropdown. You'll see options to set keyboard shortcuts for each workspace there. I've set it to Option+{1-9, 0 for 10}.
Then just open some of the permanent apps you use, and right click on their Dock icon -> Options -> Assign to this desktop. I keep the browser in workspace 1, and messaging app in workspace 10.
I know this isn't the best solution, but behind crazy-hidden settings, it is possible to get a pretty decent solution for window management on macOS. Ohh also, I use Amethyst sometimes, for i3wm-like window layouts, and it allows you to set shortcuts to move apps from one workspace.
I think it still takes like half a second for focus to change, which is the thing I care more about. I would be fine if I could switch and then immediately start typing before the animation was finished.
I use TinkerTool to remove most of the animations from macOS, which makes it feel much snappier. That one, unfortunately, I haven't been able to disable.
Which is weird, because the launchpad page switching animation can be disabled and it is very similar to the Spaces animation.
It is amazing how much snappier the os feels by just removing those dock and "genie" animations from the interactions.
But I don't want to disable all animations, just this one.
More to the point, I should be able to pick and choose which animations I want, install my own or 3rd party ones, etc, ie as far as possible, my computer should be controlled by me, not Apple.
I LOVE the desktop switching animations. On Ubuntu Unity when I send a window to another virtual desktop, it keeps the window still, and slides the background, while on Windows VirtualDesktopGridSwitcher just switches instantly. (Same for just switching desktop windows just switches, Unity slides it. But it is more common to slide that.)
On Ubuntu, I just know where am I and where are the things, while on Windows I have no idea.
On KDE my computer slides all the old windows and background away, and the new ones into the screen. Yes, it's a great thing that makes my brain know what I'm seeing.
It is also long finished by the time my finger is away from the switching key. And that is very relevant. I have no idea what Apple users experience, and "desktop switching animations" aren't all the same thing.
Mac OS takes about one second to switch desktops, with at least half that time used for the last fraction where the animation smoothly slows down. It's fine if you only need it now and then, but when switching repeatedly for some task it gets annoying quickly.
Much worse: Mac OS fullscreen mode works by moving the current window to a new virtual desktop while hiding the statusbar etc, meaning you always have a one-second delay when entering and leaving fullscreen, with videos on Twitter and some other sites it's even slower. But the UI is responsive sooner than that, so recently I accidentally minimized all applications by clicking while the screen was still completely black.
Animations are difficult to get right, I always err on the faster side because waiting for an animation to finish is never enjoyable.
I know it's easy to point at Electron specifically for examples of poor performance (and the author acknowledged it) but Spotify isn't a great example - it's the CEF flavour of web based frontend.
Always reminds me of the YouTube interview of Todoist's CTO where he was asked by the JetBrains guys what is the architecture of the desktop, and CTO sheepishly said Electron and the JetBrains interviewers couldn't stop laughing.
> Also they didn't consider themselves to be unique and special snowflakes that needed non-standard widgets and theming.
Ugh, this hurts my soul. I've worked with way too many designers who simply had to use their own icons and menus and scroll bars and drop-downs and on and on. Yea, let's throw out the person-centuries of interaction design research that the OS vendor put into the standard controls so that you, 3 years out of design school, can impose your "improved" version of them.
I agree with a lot of the points in this article but I think the ship has long since sailed, it seems very unlikely to me that companies will revert to native frameworks over electron/chromium, the incentives are not there.
"Native" is not really the right thing to look in here. As the article notes, even Windows built-in apps like calculator (/notepad/explorer/paint) are still "native" to some degree (certainly not electron based) and nevertheless dog-slow compared to their predecessors.
Any Windows users should have switched to something like Qalculate.
Or the calculator from ReactOS, which is virtually the same and it would run and look native under Windows.
Ok. Can we at least revert to sanity in the FOSS realm then?
My guess is no, since for many writing FOSS software is just a way to hone their saleable skills for BigCorp where they'll spend their days finding new creative ways to put ads in front of people's eyes.
There's a new wave of C++/Rust GUI libraries that are looking to be the frontier of bridging the gap from cross-platform -> native frameworks. If that bet pays off, we might have an alternative to Electron. Would be a couple of years down the road however.
> Linux is probably the system that suffers the least from these issues as it still feels pretty snappy on modest hardware. […]. That said, this is only an illusion. As soon as you start installing any modern app that wasn’t developed exclusively for Linux… the slow app start times and generally poor performance show up.
This is not an illusion. Cross-platform programs suck, so everyone avoids them, right? Electron apps and whatnot are universally mocked. You would only use one for an online services like Spotify or something. The normal use case is downloading some nice native code from your repo.
> Cross-platform programs suck, so everyone avoids them, right?
The thing is, cross-platform tooling sucks. A plain CLI program is already bad enough to get running across platforms - even among Unix/POSIX compliant-ish platforms, which is why autoconf, cmake and a host of other tools exist... but GUI programs? That's orders of magnitude worse to get right. And games manage to blow past that as every platform has their completely own graphics stack.
Electron and friends abstract all that suckiness away from developers and allow management to hire cheap fresh JS coding bootcamp graduates instead of highly capable and paid Qt/Gtk/SDL/whatever consultants.
there's a ton of consulting companies which are humonguous. Companies like Accenture with 780000 employees, Tata Consultancy with 488000 consultants, CapGemini with 300k-ish... it's one of the largest businesses in the world
If they can't afford to write a simple cross-platform QT5 based software for actual computing (AKA desktops except for niche usage on art with iPad for drawings and some audio production), they are doomed. Period.
I mean, I don't think that's exactly a fair comparison. These companies are focused a lot (and I mean a lot) more on enterprise software than your regular desktop software. I'm talking about Banking Systems, Automation Platforms, Government Software, stuff that has no use outside the corporate world. And they do genuinely do good work in these areas. Sure, they're not pioneers or doing some groundbreaking research, but they do their job and they do their job well (of course there are exceptions - but these aren't 100 billion dollar companies for nothing).
> but these aren't 100 billion dollar companies for nothing
Producing the best possible software doesn't produce the highest possible revenue. You'd want to produce something that works well enough that it's viable for the customer to keep hiring your consultants, but also makes it necessary to continuously keep hiring them.
So that translates to producing the worst possible software that barely works. So no, they're not $100B companies for nothing. They know exactly how to walk that line.
> And they do genuinely do good work in these areas.
I have seen genuinely passable. And lots of "good enough until we fix the underlining issue".
What I have never seen is offshored developers doing really good work. And I'm convinced their incentive structure will always punish anybody that tries.
I've seen turds as web pages at the Spanish Goverment or even the Healthcare systems.
Those are designed to deliberaterly harm the user experience full of judicial jargon so companies in the middle can get lots of profit handling the "legalese" such as filling the taxes.
Hello, I'm a consultant. In practice it's just a fancy word for temps. Company hsa money and needs some engineers but don't want to hire or take up the burden of employment, and / or needs some fresh bodies to wake up their in-house developers / make them fear for their own jobs because they've stagnated, they call us.
But we're a relatively small consultancy (think hundreds instead of tens of thousands like the bigger players), so it's a bit more refined. We do have decent developers, but the issue with consultancy on that level is they're too smart for their own good, they will suggest an over-engineered solution that can't be maintained by anyone BUT these consultants and / or hired self-employed people. It's a weird fallacy, a weird rotating door of consultants and cycles of development where every 10 or so years they do a full rearchitecture / rebuild of their back-ends, while meanwhile some people just sit and maintain the existing - and working - core systems.
It's massively wasteful. But it usually pays better than a regular in-house developer, and it's lower risk than going self-employed because you still work for an employer who pays you per month. I'm just salty that said employer creams off 2/3rds of my hourly rate.
No, they don't always suck. As an example, QT is cross platform, fast and complete.
But Electron is god awfully slow, and Eclipse can be too. The difference is QT apps are compiled and are generally written in C/C++, where are Electron and Eclipse are interpreted / JIT'ed, and use GC under the hood. As a consequence, they run at 1/2 the speed, use many times more RAM and to make matters worse Electron is single threaded.
The problem isn't cross platform. It's the conveniences most programmers lean on to make themselves productive - like GC, or async so they can avoid the dangers of true concurrency, or an interpreter to so they don't have to recompile for every platform out there. They do work - we are more productive in turning out code, but the come at a cost.
I think you’re saying that decades of r&d by the largest tech companies in the world can eventually produce a browser runtime that renders text about as fast as a couple people working in python and C.
"But that's haaaarddddddd for me as a lazy software developer who went to college and learned complex algorithms and calculus and physics and chemistry just because but can't seem to handle a few #ifdefs because they aren't in vogue anymore"
Except our organization builds python and java apps so all our shit is multiplatform by default or even by accident. Hell, I put together consistent, cross platform Swing UIs before I even understood what maven was.
I kinda disagree with this. I have definitely noticed that my cursor can be slow to respond when some linting/formatting (I can't quite tell what is causing it, I just notice it) is going on. Totally usable, but I'm also coming from emacs and it's not like emacs is known to be blazing fast so I actually think my experience is sort of inline with the article's point.
Despite or because of emacs being older, it's more responsive than vscode in my usage.
Vscode is fast compared to most modern editors, but it's still twice as slow as Sublime in terms of input latency, UI responsiveness, text coloring etc.
An hour with Sublime/Vim followed by going back to Vscode is a painful experience...
It's not really a 100% replacement for all of VS Code's features, but there is a pretty big overlap in functionality that may meet most people's requirements: Notepad++
Browsers are ridiculously fast. People just add more and more until they hit the wall where they need to start optimizing. For someone trying to get things done, that’s probably the right method. But it means that ultimately what determines how fast your program runs is not how fast your computer runs, but how much delay you’re okay with.
Not really sure about the cross-platform caveat... `dropbox-lnx` eats away 265MB of RES for it's file syncing job, I'm pretty sure what Dropbox was doing on my old laptop was very heavily 265MBly important. Also, `keepassxc` takes away 180MB of RES when you opened it.
The first Linux that I've used, Mandriva (KDE), runs smoothly on my Intel Pentium 4 PC with 256MB of RAM. I can even do some web browsing (Flash gaming) and music playing without feeling slow. That's an entire OS, running on 256MB of RAM.
On MDV, KDE and PIV, same here with an Athlon 2000 and 256 MB of RAM with Knoppix and later FreesBIE with XFCE, which ran much faster and snappier than even today's i7's with Plasma 5.
And if it's for an online service, why even have it as a separate app? Just run it in your browser. You'll get the exact same thing but in the one instance of Chromium that you already run anyway. You also get the added benefit that your extensions work with it.
It's not just cross-platform programs that suck. Applications moving to gtk4 from gtk3 add an extra 100-200ms of startup latency every time because of OpenGL initialization and shader compilation (there is currently no cache), varying a lot depending on your CPU. Applications that used to open instantly now have have a noticeable pause, even if it's still short compared to the worst Windows applications. It's been reported multiple times for well over a year now and no improvements have been made.
I think there’s an important additional factor, which is how dynamic so much UI is these days. So much is looked up at runtime, rather than being determined at compile time or at least at some static time. That means you can plug a second monitor into your laptop and everything will “just work”. But there is no reason it should take a long time to start system settings (an example from the article) as the set of settings widgets doesn’t change much — for many people, never — and so can be cached either the first time you start it or precached by a background process. Likewise a number of display-specific decisions can be made, at least for the laptop’s screen or phone’s screen, and frozen.
The number of monitors was also checked at runtime at the 90's. The only difference is that by then it was checked only at startup, and now there some aynchronous function that checks it all the time... What is to say that now it should be faster.
On any of the complex Linux DEs, the set of settings widgets was always set at startup, since those complex DEs existed. On Windows that varies from one interface to another (there are many), but at least for Win10, things have gotten much more static on the new interface. (I dunno about 11.)
Anyway, the amount of things you can read from the user on a Windows app startup time is staggering. The applications on the article have many orders of magnitude less (relevant) data to deal with.
The "plug in a monitor" case is an example where computers are hilariously (and likely unnecessarily) slow to do something that should be simple.
Say I have two monitors plugged in and running. When I plug in a third one, here's what happens:
1. Monitor 2 goes blank.
2. Monitor one flashes off then back on.
3. Monitor 2 comes back on.
4. Both monitors go off.
5. All three monitors finally come back on.
Putting on my developer hat, I kind of know what's going on here. The devices are frantically talking to the device drivers, transmitting their capabilities, the OS is frantically reading config files to understand where to display the virtual desktops, everyone is frantically handshaking with everyone else. It's a terrible design and should not be excused. Putting on my end-user hat, what the fuck is this shit? I just plugged a monitor in. I'm not asking the computer to perform wizardry.
Even if the frantic handshaking is somewhat necessary, I don't think it's justified that it takes over 1 millisecond, let along multiple seconds with monitors turning on and off in the meantime. Seems like shoddy work on every end.
> Even if the frantic handshaking is somewhat necessary,
I don't believe it is. Sure, it's probably necessary in this frameworks of frameworks systems we're running right now. Drivers, kernel, privilege levels, userspace, whatever. But I believe if we were to rewrite everything from scratch without the 90s technical debt and careful planning beforehand it would be easy to have a dynamic monitor connecting algorithm which doesn't suck like that.
There is no mention in this article on the effect of modern security measures on desktop app latency. I'm thinking about things like verifying the signatures of binaries before launch (sometimes this requires network roundtrips as on macOS). Also, if there are active security scans running in the background, this will eventually effect latency, even if you have lots of efficiency cores that can do this in the background (at some point there will be IO contention).
Another quibble I have with the article is the statement that the visual effects on macOS were smoothly animated from the start. This is not so. Compositing performance on Mac OS X was pretty lousy at first and only got significantly better when Quartz Extreme was released with 10.2 (Jaguar). Even then, Windows was much more responsive than Mac OS X. You could argue that graphics performance on macOS didn't get really good until the release of Metal.
Nowadays, I agree, Windows performance is not great, and macOS is quite snappy, at least on Apple Silicon. I too hope that these performance improvements aren't lost with new bloat.
I'm glad you mentioned this in the comments - I was wondering if they were going to touch how applications are sandboxed and everything. I would imagine that is a large part of current 'sluggishness'.
Almost certainly not? Sandboxing and anything non-visual can happen at a ridiculously fast pace.
I'd suspect a lot of this is offloading so much of the graphical setup to not the application. Feels like we effectively turned window management into system calls?
If those mythical safety features actually make an impact then shouldn't they slow down everything, including a hello world program? Yet the performance gap between well-optimized and sluggish software only grows.
So, I had to try this. And look what happened on a 2015 Macbook running Monterey (edit: but check the thread below for possible explanation):
ojs@MacBook-Pro-4 /tmp % time ./a.out
Hello world
./a.out 0.00s user 0.00s system 1% cpu 0.268 total
ojs@MacBook-Pro-4 /tmp % time ./a.out
Hello world
./a.out 0.00s user 0.00s system 72% cpu 0.004 total
It's really that slow on first try. The binary was compiled just before running it, and it's the simplest possible hello world using C++ std::cout, compiled with -O3. C version with puts behaves just the same.
If applications were only slow the first time I wouldn't have any issue with it. But we all know that's not the case.
The difference you show depends on the internet connection, on slow wifi I've seen this delay go over 0.7s in the past. But again, just the first time, which is a problem for developers who recompile their code frequently but for the end user experience that's not as relevant.
Do you know why running the binary is slow for the first time, and that it will be fast forever once it's been run once?
I thought it's common knowledge that starting apps for the first time after reboot or after doing something else is slower and usually it's explained by the app being in cache for the next launch. But here the it can't be cache, because reading anything from SSD can't be that slow and it should already be in cache anyway.
The first time you start a program on Mac OS it'll contact an Apple server to see if it's known malware or something like that. So it doesn't happen the first time after boot but the first time you ever run the program after installation or compilation.
Thanks for the explanation. I thought code signing was supposed to reduce the need for this kind of checks. Still, stuff like this isn't helping with performance and if the new binary is sent somewhere outside the developer machine legal departments would be interested too.
The comparison between the win32 Notepad and the UWP version is telling, though, on the same hardware, and with the same security constraints. Similar between the old (Window 7) calculator and the newer one.
I don't think all this should be relevant - once it was launched at least one time, the OS should be able to tell that the binary hasn't changed, and thus signature verification is not necessary.
The comparison is using OS X 10.6 - I used to daily drive it and it was pretty snappy on my machine - which is corroborated by this guy's Twitter video capture.
As for Windows performance - Notepad/File Explorer might be slower than strictly necessary, but one of the advantages of Windows' backwards compatibility, is that I keep using the same stuff - Total Commander and Notepad++, that I used from the dawn of time, and those things haven't gotten slow (or haven't changed lol).
Assuming the binary on the disk hasn't changed opens to time of use type attacks, where an "evil disk" is substituted that changes the binary after the first load. (Or, more likely, some sort of rootkit)
Unlikely, yes, but that sort of thing comes up in security reviews.
Check it with a cryptographic hash. With I/O bottleneck, and assuming a SSD at 300 MB/s, that should bring the latency to 3 ms, well below human perception. Even the 60 MB/s of slow HDDs should be more than fine.
Anyone who has worked on optimizing complex programs knows that you can do a lot with a computer. > 100 ms latency to open Notepad is just ridiculous.
Even on an M2 Mac Spotlight takes a second or two to appear after you hit the shortcut. Apple notes takes an absurd 8 seconds to start. Apple music and Spotify are also take seconds to start. Skype takes 10 seconds.
I'm very happy with my M2 Mac. It's a giant leap forward in performance and battery life. But Electron is a giant leap backward of similar magnitude.
I'm using the Air M2 16GB, switched from Notion to Notes and Reminders, one of the reasons is that these apps are way faster. It also uses under 100MB of ram.
Note: The main reason is that Notion is fantastic but too much for me. I'm not that organized...
To fix the Spotlight delay, you have to disable Siri in the system settings.
If Siri is enabled, the OS waits until you release the space bar to determine if you performed a long or a short press, which causes Spotlight to be delayed.
I just tried all the examples you gave (on my M1 Max) except Skype which I don't have installed here, they all load in 1 second or faster, maybe its something else on your Mac?
"Retrofitting performance into existing applications is very difficult technically, and almost impossible to prioritize organizationally."
While this may not be the only explanation for why this trend continues, I think it's *spot on* to explain why this continues in commercially-funded software.
Its not just that current crop of systems are laggy, but there aren't even clear paths towards recovery. Maybe xilem will get released and mature at some point for devs to be able to rally around it and build new desktop experiences with great perf again, but the timeline for that feels more like in 2030s with great deal of uncertainty. But in general I don't see any groups or projects taking serious, principled, look into making desktop performance great.
Used to be you would click on a URL and the page would load immediately, now there's a half a second wait so you can be tracked before they feed you the page. It's very noticeable.
On one hand, lag is real. I rebooted my M1 Mac mini yesterday running Ventura, and while it only took a few seconds to boot to the desktop, it took, like, two minutes for it to stop beach-balling and finish initializing. (It was most likely waiting on network I/O to finish, but still.)
On the other hand, machines are faster than ever before while doing more than ever before, and apps are more flexible and change more quickly (largely in part to super approachable cross-platform frameworks like Electron). A few milliseconds of UI latency will bother almost no-one.
On the other _other_ hand, Julio's demo of using Windows 2000 on an time-appropriate machine is best case. I definitely remember waiting what felt like eons for lots of useful apps to load, like Office and Internet Explorer. (Remember when browsers had startup screens?)
He's definitely right about how far hardware has come since 1999.
The shift to Apple Silicon was even more transformational than the transition to SSD, IMO. Julio's right in that the shift to SSD was night-and-day, but going from an Intel Mac to an Apple Silicon Mac sped up literally everything you used to an insane degree AND you got 12+ hour battery life to boot.
This used to be an either-or kind of trade-off, and for Windows devices, it still is.
To wit: I used an Intel Mac Pro (the trash can) last week for some audio work, and that super expensive almost-server-class machine was _slower_ than my base model M1 Mac mini at home, while running (slightly) louder and hotter!
> On the other hand, machines are faster than ever before while doing more than ever before, and apps are more flexible and change more quickly (...). A few milliseconds of UI latency will bother almost no-one.
On the forking hand (distinct from your "other _other_ hand"), the "doing more than ever before" neatly cancels out "faster than ever before", which prompts a question: how useful is whatever it is our machines are doing now? Because one thing is clear: most of that extra work is not visible to the user. The increase in software capabilities is much, much smaller - nowhere near enough to explain where all the performance goes.
We could break the extra work into several categories:
- Support for better hardware - e.g. higher-resolution screens require more RAM (somewhat compensated by GPUs), and require higher-resolution assets to maintain (not even improve on) decent clarity, which has second-order effects on storage use (partially offset by compression) and CPU use on decompression (the price of offsetting storage use), etc.
- Security features - cryptography, secure protocols, isolation, sandboxing, etc. - those all cost CPU and memory.
- "Security" features - "real-time" malware scans (bane of my existence), shady anti-virus/firewall software (i.e. almost all of it), and various other parasites living off people's fear (or need for regulatory compliance), and convincing users to pay them with money, time and compute. Not (x)or, and.
- Legitimate new features - handling more type and variety of content, more advanced algorithms, etc. Continuous auto-saving and collaborative editing are two big and perhaps underappreciated generic advancements.
- ... ???
The first four items on the list don't seem to account for all the performance loss, especially for software that doesn't do things requiring modern security, and offers the same set of features as its equivalent 10 or 20 years ago. Often less features, even.
That last point, the "dark matter" of computing, needs more detailed study. We can guess a chunk of it is developer convenience, but that's not all of it either.
WRT. developer convenience - as a developer, of course I like it, but it's really getting out of hand - at this point, whatever I buy for myself by externalizing the cost on users, I still lose because I'm also the user of development tooling, and those developers externalize on their users too...
>On the other hand, machines are faster than ever before while doing more than ever before, and apps are more flexible and change more quickly
I suspect this would fall apart the instant you try to rigorously quantify it. Put an actual number on how much faster machines are, and put an actual number on how much more useful stuff is happening. I cannot imagine that all of the slowness could be accounted for. I doubt you'd even account for 10% of it.
>A few milliseconds of UI latency will bother almost no-one.
No, this mindset is a death sentence for good software. All it takes is a few people at each level of the stack making the same excuse. Five milliseconds here, three milliseconds there, ten milliseconds, surely nobody will notice. But it all adds up (or worse, it multiplies in some cases).
> No, this mindset is a death sentence for good software. All it takes is a few people at each level of the stack making the same excuse.
To pile on to this, it's not just five milliseconds here and there in your application but its position in the rest of the system. Your application's 5ms regression is tested on an unloaded machine (for example). That means you lost 5ms on an unloaded machine with all its considerable resources available.
That regression is very likely to be much larger in a loaded system where your process is contending for resources. On a loaded system your 5ms regression becomes a 20ms regression along with everyone else's 5ms regression. So now the user is sitting there wondering WTF is happening.
There's a pretty good chance your GUI application will be running on a mobile device of some sort. This means it's running on a device with power limitations. The CPU might be vastly underclocked to save power or you could be running on an efficiency core instead of a more powerful performance core. Now your 5ms performance regression is possibly 100ms. A couple such regressions that "don't matter" on the 3GHz test desktop become significant on the user's laptop with 15% battery remaining that's clocked the CPU down to 600MHz.
Performance regressions should always be a concern and testing should to encompass the pathological worst cases. Even if there's nothing you can do about performance regressions (that 5ms of work is exploit mitigations or something) they should at least be quantified and understood.
> I definitely remember waiting what felt like eons for lots of useful apps to load, like Office and Internet Explorer. (Remember when browsers had startup screens?)
I agree completely.
It's definitely disappointing that simple programs like Notepad and Paint are now laggy (I can reproduce the exact same lag on my 2-year old 16-core i7), but computing in general was SLOW back then.
Booting a computer often took over 5 minutes. I'd turn it on, prepare a drink and come back to the desktop partially loaded with a laggy 'wait' cursor waiting for my startup programs to finish loading.
Launching larger programs such as Word took more than a minute in some instances.
You're playing music AND want to open another application? Well that application will open 2x slower now due to lack of RAM.
I'd love to see a comparison of a current version of Word on a current machine opening vs Word 2000 on a 2000 machine.
The prioritisation has changed. Opening apps is slower, starting new documents/views within the apps is fast. With enough RAM you just keep all the apps you are using running and switch between them.
I've not started an app so far today, not sure I did yesterday either for that matter. I certainly created plenty of tabs in chrome, and new terminal windows, but those just pop as instantly as far as I can tell.
Applications tend to stay open on Mac even with no windows open. As a KDE on Linux user, I tend to open and close apps as I use them. Very few applications take more than a second to load on a modern machine with an SSD, anyway.
I find that many desktop GUI programs are slightly misbehaved for whatever reason, and consume some small but real amount of resources when idle in the background. When a dozen are open response time will be poor.
Not that I disagree with the core point that some software gets worse over time, but I don't think it is valid to say that users have not benefitted from the ease of development afforded by Electron. Spotify has maintained its nominal price at $9.99 for 12 years, meaning its real price has fallen by one third. I don't know anything about Spotify or why they spend over a billion dollars in R&D each year, but if lack of attention to UI performance has helped cut their development costs then users might be benefitting through lower prices.
> I don't know anything about Spotify or why they spend over a billion dollars in R&D each year
Standups, one-on-ones, team fika, NIH, retros, agile retros, incident post mortems, cross-team fika, town halls, pool/billiards, table-tennis, and testing-in-prod.
Which features? For instance, Kopete had far more features than Slack and Discord combined and using 10X less resources. With inline videos, videoconferences, inline LaTeX rendering and who knows what.
Ironically Spotify and the rest of the Electron turds barely cover the 10% of what we did with Amarok and KDE3 with Kparts and using 10% of the resources.
What we are seeing it's people using damn 18-wheelers with less features than a tricycle.
Opera for instance was propietary but it even had a Torrent/Email client while being usable even under a Pentium 4 at amazing speeds.
Now try that today with Vivaldi.
More IM. Pidgin. Bloat it to the extreme with 4 or 5 or even 10 protocols being run at once while adding lots of plugins such as services for Google Translate, inline videos or HTML parsing until it uses ~512MB of RAM. Still it runs far snappier than Discord, it uses 4X less RAM and a simple Athlon/Pentium III can drive literal thousands of conversations in parallel.
Which features did the slower Notepad gained? And just as importantly - which of these features could not have been gained without a drop in startup time?
That makes me wonder, would a notepad executable from XP or 7 run on 10 and 11, and would it be faster?
On my Win 10 machine with an SSD and animations turned off Notepad and cmd do launch almost as fast as in that NT demo so maybe it wouldn't be much of a difference.
I'm not sure this is a great example. A formula 1 car is significantly larger and more complex than any go-kart is is 4-5x as fast. In fact almost any car you can purchase will significantly out perform a go-kart.
I don't think just adding features means software must be slower. I would venture to guess Emacs has more features that Word, especially when you factor in plugins, and is significantly faster than Word.
There's actually an answer to this; if you compare the Windows machine to the average spec from the time it was released you'd probably find comparable performance. This is not a coincidence. What is happening is this: Work is put in to attain the minimum level of performance a paying user will find acceptable. This threshold has not changed, so in general, neither has real performance. The places where modern computers actually strut their stuff is where the paying users care a lot. For example, a game pushes 120Hz at 4K because the paying customer cares. Video editors care about every last bit of performance because at scale each bit becomes seconds to minutes to hours pretty quickly.
(There's an averaging effect to. That game paying customer might like it if Windows was snappier, but in that market they're just another voice in the crowd of people who on average are satisfied with the current status quo.)
"Paying customer" is important too because you can almost measure how much social power the user has by how slow the software is. Why is the point-of-sale device in the checkout miserably slow? Why does the device the desk receptionist is using at your national-scale bank need 30 seconds just to pull up your appointment information? Those people have no social power, so they get to just sit and wait while the computer swaps things in and out for a truly simple task. Executives get machines that can switch between email and the browser in a heartbeat with the other 24 gigs of RAM and 6 cores do nothing. Using what machines the developers get as a metric for how much the company cares about them is something smarter developers have been doing for a while; if your developer interviewer uses the 8 minutes it takes their machine to boot to sing the praises of the engineering culture the company has, well... make appropriate judgments.
(In 2023 this almost impresses me. Setting up a computer that needs 30 seconds to switch between a calendar and an email is almost a challenge now. You need to harvest those last few precious $10/unit to give them really shitty hardware and combine it with an almost sociopathic dedication to layering on enough virus scanning and tracking software to slow down a cheap machine even so. Even the cheap stuff shouldn't be that slow!)
If you work at it even a bit on Linux, you can set up a very responsive system. You've been able to for a long time, really. But you may find you don't get to use the latest and greatest of the heaviest weight desktop system at the time. It's a lot easier on Linux to use the stuff from years ago that flies now. Emacs use to be joking referred to as "Eight Megabytes And Constantly Swapping"; now it's a "light-weight" text editor. (Though it doesn't quite start instantly for me, it is under a second in my configuration. YMMV.)
>if you compare the Windows machine to the average spec from the time it was released you'd probably find comparable performance.
This is not the case, he specifically debunks it it in the twitter thread. He took a contemporary late 90s machine with modest specs, and it was still snappier than the modern PC with Windows 10.
And even if that were the case, it does not follow that we should accept modern machines not being able to load Notepad instantly. Modern machines are hundreds of times more powerful than 20 years ago, but Notepad has not become hundreds of times more featureful.
There is a lot of fuzz in that comparison. I used machines at that time. They were not snappy if you had the average specs. I am not convinced he got that in his comparison. In particular modern iterations of those old machines are usually stuffed with RAM by comparison because since then it has become so dirt cheap to do that that it's not worth not doing it. I acknowledge he at least tried but I'm not convinced he succeeded and even by his own text you can tell he's not exactly putting a huge marker down on the older system being the exact right system. Average specs typically dipped into swap. (The supposed minimum specs were often a joke.)
"accept"
I'm a bit at a loss as to how anything I said sounds like we should accept this. Did I not call it almost sociopathic how IT departments manage to slow machines down for people who have no social power? Does that sound like I think this is hunky dory?
Not snappy on reading I/O but the UI was fast as hell.
With SSD's a Pentium IV with SSE2 support with TDE3 under Slackware Linux running Konqueror, Amarok and Kopete (Konqueror against a non-JS site) will run circles around lots of core i7 setups with Spotify and Slack...
I am going to play devil's advocate here. What can an average person do. I eventually dropped windows for a linux distribution and while it was a learning experience, I can kinda see why it is not a default approach for most people. It is hard for most to overcome inertia. Personal example, before I felt compelled to jump I installed dual boot I almost never used. Things simply have to get bad enough for people not to accept things. As long as they in the 'annoying' realm, most will put up with it.
It is a sad commentary about human nature, because it suggests a slow enough decline will be accepted.
I have mostly old hardware (the best computers I have is a smartphone and a macmini from 2012). I'm disappointed when I load newer Linux distros and they appear slower. Even though I now have SSDs. Browsers are really greedy. I have a machine with 2GB of ram and a single core CPU. It's a low power rig. But cannot run Windows 10, it just about did when I first installed it. Debian runs better, but a browser kills it. It's a one app only. We had someone donate us a Windows 3.1 rig once, at the time we had 600MHZ Windows 2000 machines and ME. And we were gob smacked at how fast the 3.1 machine was on some ancient hardware.
Windows always used to have that fresh lightweight install vibe. But as soon as it started indexing, doing updates, and virus scanning it would drag to nothing. Along with all those system tray apps that would take an age to fire up.
Partial suspend to disk made things boot faster. Like not doing the whole driver scan thing on boot. I don't know if Linux has ever taken this on board. It's a blessing and a curse as Windows doesn't like being ported to another machine, whereas my Debian disks I can swap between some desktops and laptops without much issue.
There's also that weird delayed animation thing, that is meant to feel like polish. But slows down desktops. Weird animation effects and what not. I tend to run XFCE and turn off any thing like that.
I'm using a Chromebook right now and this is an old machine, but still feels pretty snappy. Certainly weird and wonderful experiences between hardware. I have High Sierra on an SSD on my Mac Mini, and that's slower by far to boot than my Linux Arch box on the same age hardware. Having said that the UI always feels more responsive as it's tailored for that.
Linux suffers lots for me with kcompactd or whatever it is. Some weird memory disk swap stuff. If I accidentally code an infinite loop my machine turns to complete mud, and takes about 5 minutes to recover. Whereas it boots to the browser in under 1minute. Weird huh?
> I have a machine with 2GB of ram and a single core CPU. It's a low power rig. But cannot run Windows 10, it just about did when I first installed it. Debian runs better, but a browser kills it. It's a one app only.
I put Alpine Linux on my laptop that has 1 GB of RAM and I can actually have a lot of stuff running at once, especially in the terminal (Emacs, SBCL, w3m, Deno).
But yes, opening Firefox consumes all available RAM until I have to power off the machine, sadly. The lightest weight, but functional browser, I've found is Midori, but I probably wouldn't trust it for, say, accessing my bank account.
It's depressing because I was initially blown away at how fast (and productive) old hardware can be... until I tried to use the web.
A few years ago, I was working with a team that was trying to convert an entire API for a fairly straightforward application into REST api microservices.
The architect wanted to break everything up into extremely small pieces, small enough pieces that many were dependent on each other for every single call. Think "a unified address service" to provide an physical address via an identifier for anything that had an address (customers, businesses, delivery locations, etc).
The problem was that it turns out when you're looking up a customer or business, you always need an address, so the customer service needed to hit the address service every time.
Disregarding the fact that this whole thing was a stupid design, the plan was that when you hit the customer api, the customer code would make internal http calls to the address service, etc.
I pointed out that this was a ton of unnecessary network overhead, when all of this information was sitting in a single database.
The whole team's argument was effectively - "it's 2015, computers and networks are fast now, we don't need to worry about efficiency, we'll just throw more hardware at it".
The whole thing ended up being scrapped, because it was crippled by performance issues. I ended up rewriting the whole thing as a "macroservice" which was 60000% faster for some particularly critical backend processes.
Anyway ... I think that mentality is prevalent in a lot of people involved in technology creation, technology has improved so much, moore's law etc etc etc.
So let's not worry about how much memory this thing takes, or how much disk space this uses, or how much processing power this takes, or how many network calls. Don't worry about optimization, it's no big deal, look at how fast everything is now.
I strongly believe the technology becoming faster is itself the biggest problem around slow technology. The constraints of slow hardware forced developers to do things "the right way". Today, you can serialize a gigabyte of JSON before the user will likely notice. Really hard to not be tempted by this dark path of incremental performance cuts in favor of dev-time convenience.
Just look a bit further down the front page of HN today and you'll find a legitimately-heated debate regarding whether ORMs bring value or no. But, who can blame the developers? The pressure from management is eternal and some of us like to spend our time on non-computer problems too. Reaching for a JSON serializer or ElectronJS over Win32 and raw SQL is an understandable decision when presented with real-life pressures.
I think if we want to see good user experiences, the capitalists and management will need to start prioritizing them again (at their own expense). This is a very difficult narrative to sell, but I've had some traction in my company with "higher order consequences of good UX today means more sales in the future" kind of talk. There is also a story about pride in the product and the improvements this brings for internal operations. Imagine if your executive leadership came into the room, smack talked the electron JS pile and insisted it be rewritten from scratch while targeting native toolchains? Would that be enough of a fire to get the average developer to start thinking again or are we too far gone at this point? Clearly, we are mostly beyond the phase of "valiant developer works overtime to strive for better UX despite any and all mgmt pressures".
If my cofounder told me to translate our current Electron app to something else (maybe Rust), I'd jump on it. As it is, I've wondered if I have an obligation to do so anyway, on my own time, giving up all nights and weekends until it's done. But our actual users don't even seem to care, and some have been very positive about the product.
> a lot of the Windows shell and apps have been slowly rewritten in C#
I worked on the Shell team until late 2022. There is very little C#, if any at all.
The vast majority of the Windows Shell is still C++ with a significant amount of WinRT/COM.
What I had in mind when I wrote this sentence though is how the modern apps that people seem to like /are/ C#, such as Windows Terminal and PowerToys, and these feel quite slow to me. But, yeah, calling those the shell is a stretch.
Bad memory. The idea that Windows Terminal was C# was in the back of my mind for some reason but I did not verify this fact. Thanks for keeping me honest; updated the text now.
PowerToys is mostly C# though, which I have also verified now.
Windows 2000 was later corrupted by XP-ification. The primary difference was 2000 was "NT 5", where the Explorer UI appeared to be split between foreground and background components. XP threw this away and went with the Windows 9x/ME shitshow as late as Vista. Windows Server 2003 (Whistler Server) was better than XP (Whistler) and was mostly an improved Windows 2000 (originally named NT 5 in the source code). I would generally consider using Windows Server 2003 for workstations instead of Windows XP because of its close compatibility with the latter. Windows XP Professional x64 (amd64) and Windows XP 64-Bit Edition [ia64] existed but didn't find many takers except in retro systems and niches where they had HP Itanium machines.
It's one of the things that are infuriating for technical folks but meh for everybody else.
In the days of programs taking forever to load or web pages downloading images slowly we knew what technical limitations were there.
Now we know how much sluggishness comes from cruft, downright hostility (tracking), sloppy developer work, etc.. we know this is a human problem and that angers us.
But for non-technical people it hasn't changed too much. Computing wasn't super pleasant 25 years ago and it's not now. Instead of waiting half a minute for Word to load they wait 4-5 seconds for Spotify to load. They were never interested in Notepad or Cmd or Paint. It doesn't bother them that now they open slower than in 1999.
It's very surprising to me how much non-tech people are willing to put up with. They'd patiently wait for their phone to freeze for a solid 5 seconds because they installed an antivirus on it, and then proceed to try to use it at 2 FPS.
The quality bar is so low now, it went underground. It's so easy to compete with the status quo. You just pretend that all the "progress" that happened in software development technologies over the last 15 years didn't happen. And, most importantly, you treat JS as a macro language for a glorified word processor and don't try to build actual applications with this stack.
Many non-technical users assume blame for slowness and clunkiness. So many times I've heard self-blame when helping out family. "I shouldn't have so many pictures on my desktop" (there are 8 pictures). "I just can't figure out these phones" phone is dark patterning or has hidden functionality six menu items deep and behind a swipe/long press. "I never should have let it update, it's never been the same" - a forced update.
When the reality is more cpu/memory usually cleared things up. In the old times a good defrag did not hurt either.
People blame themselves when a lot of the time it is rubish software/hardware.
Then you have the other side of that coin. The yes clickers. If it asks a question just answer it however you need to do for whatever it is you wanted to work. Surprising number of dark patterns on that gem... Then they hand it to you and expect a miracle in 5 mins. Sorry this is the first time I have every seen something like this it may take me a few mins to figure out what is wrong before I can even begin to fix it.
> Then they hand it to you and expect a miracle in 5 mins. Sorry this is the first time I have every seen something like this it may take me a few mins to figure out what is wrong before I can even begin to fix it.
Oh yeah, like when I have to fix the smartphones of people who have been using them for years while I do not own or use a smartphone. I will fix it, but I've got to learn how to launch/exit an application first ;-)
Many people (hi mum!) are surprised that you may take a few minutes to calmly observe, probe, assess, read and think a bit before engaging in the actual fixing. It never occurred to them that one may do something else than clicking, more or less randomly and as fast as possible, when something shows up. And do not worry about your example altering their future behaviour, it will unshakeably go on as it always went :-)
Oh the "too many pictures" thing is a favourite of my older relatives. They think it must be "weighing it down" or something and they have to delete pictures to make it go faster.
On the flip side, I recently visited a local tourist attraction, where a visitor asked me to take a photo for him - and then promptly had to spend 2 minutes deleting files on his phone because he’d literally run out of storage space and his phone wouldn’t let him take another photo. Bit of an awkward moment!
My parent comment is based on real events. A relative did actually install an antivirus and a bunch of other crapware on her Android phone. The thing was so agonizingly slow I just didn't understand how she used it at all.
But that phone ran an Android version from before Google started seriously cracking down on apps running background services without restrictions. Modern Android is pretty robust in this regard — with a few exceptions, an app can't run in the background without showing a notification ("foreground service" is how the API calls it).
There wasn't much self-blame. She just assumes that technology is like that, complicated, unreliable, slow, and full of magic. It's nice when it works, but not a huge loss when it doesn't. She would also indefinitely quietly put up with things not working until someone asks and finds out, then I'd fix it.
I agree though I’d say non-technical people are naive and so don’t know why the experience is not ideal or fun or smooth. I suspect if asked the right questions, non-technical people would also complain.
Computers have always been just useful enough for as long as I’ve used them (since the 80s). We’ve _always_ put up with a lot of nonsense and pain because the alternative is worse.
Latency is one of the things my iPhone owning friends complain the most about when they try another phone (usually a Samsung loaded to the brim with bloatware)
This. My daily driver is a geriatric iphone 7. When I bought a new Galaxy A33 a few months ago for my mum, I took it for a spin for a day. I was shocked by how much lag there was, for example when scrolling. I know the A33 is a low-maybe-mid-tier phone. But it was brand new, whereas I bought my iPhone used in 2017 when the 8 was already out and maybe even the X (if not, it was right around the corner).
It actually was a very weird feeling because the scroll itself was way smoother than on the iphone, probably thanks to the somewhat higher refresh rate. But there was a noticeable and weird lag between my finger movement and the screen contents moving. Also, scrolling would sometimes randomly glitch for no reason in basic apps, like the settings.
What's the situation for new iPhones? Is the compute power of chips more powerful than my computer eaten away by software latency? I'm thinking about buying one. My iPhone 7 only started to very sligthly lag after the iOS 16 released and its update lifetime ended. I'm still using it. I don't even notice the lag if I don't pay special attention.
And no, I'm not an Apple fanboy, rather a NixOS nerd but I need a phone that reliably works.
The lack of latency comes from decisions at every layer of the stack — apps don’t control scrolling or layout, the OS does. iOS is consistently responsive to user input throughout all versions and levels.
My Xs is still fantastic except on battery life generally or if it gets hot at all (sun, charging, running shit apps). My main issue is Google Maps kills my battery life faster than anything else except maybe scrolling through Instagram reels.
My understanding is that the A33 is the same phone, only with somewhat cheaper display and cameras, so it should be able to get there, too.
So, how do you get rid of that bloat? I've tried removing all the apps I could, but it didn't make any difference.
Before my iphone, I used to have the GS1, 3 and 5 with custom ROMs. My fondest memory is of Slim Rom on the GS3. It gave it back its life. Before the A33, my mom used to have a GS4 mini with LineageOS. It ran circles around the stock version, even though it was a newer Android version. I think the A33 wasn't supported back when I bought it, so I left it with its stock ROM.
Do you think they do (or at least used to do) some tuning of how the UI reacts to touch?
Before my iphone, I used to have a GS5 with LineageOS, too. I don't remember the iphone being noticeably better for touch-related lag, which is why I was so shocked when comparing with my mom's brand new phone.
I'm even more amazed at my IT colleagues (so "tech" people) putting up with windows' doing god knows what constantly. We have the exact same machines, yet mine somehow basically never has its fan on running Linux and compiling Rust, whereas theirs is often audible while running Windows with a couple of chrome tabs open and outlook.
They also don't bat an eye when lazy devs recommend we should reboot the servers daily. They put up with laggy VNC when they have a perfectly good remote desktop solution set up.
I guess, if it sorta kinda works, people just get used to it. The fans blowing like a jet engine. Apps taking forever to load. Windows getting stuck for no discernible reason.
> We have the exact same machines, yet mine somehow basically never has its fan on running Linux and compiling Rust, whereas theirs is often audible while running Windows with a couple of chrome tabs open and outlook.
I think some of this is just poor defaults. Every windows laptop I've had in the last 10 years has defaulted to a thermal management profile that ran the fans aggressively. Usually you have to install some crapware from the manufacturer (it's "Dell Optimizer" on my current machine) that allows you to change the thermal profile to quiet mode, and it's totally fine after that.
I can buy that, but, anecdotally, my machine is noticeably warmer when I'm under Windows [0], and it does blow its fan too, just like my colleagues'.
So, I don't think it's just a question of fan profiles. Plus, on Linux, I can't control the fan. I can't even read its speed. On Windows, they have all the "recommended" HP crap, but it's true that I didn't fiddle with those, and I doubt my colleagues did, either.
---
[0] I do use Windows rarely, but when I do, it's for fairly long stretches (multiple days on end) so it has the time to do its scanning, updating and whatever elsing.
The terrible thing about modern macOS and Windows is that they keep indexing your files in the background. Microsoft and Apple somehow consider that index-based "instant" file search better, yet it's actually extremely terrible and mostly useless. The file search in XP, that traversed the file system every time you searched something, worked so much better than anything modern. Right now I use a Mac app called "Find Any File" that does the same thing.
On other stuff Windows does in the background, I managed to disable Defender and the updater on my VM by deleting their files via the recovery mode command prompt. That seems to be the only reliable way to do that.
One of my favorite ways to 'fix' vista era machines was to turn off the indexer. That bad boy would take over the machine randomly then rescan the files over and over. They fixed a lot of it in sp1 and win7. But it is still terrible.
On Windows with NTFS drives (networked or local), I use VoidTools Everything for instant as-you-type search results. It doesn't index contents of files, and for networked drives must periodic'ly re-index them, at moderate cost (compared to the heavier cost Windows Search when indexing /local/ drives).
Also unlike Windows Search, it doesn't default to "search a few of the most common locations and either take a random number of seconds to realise at least one of the search targets was already displayed in the current folder where you started your search or claim that nothing was found (when one or more actually matches exist)".
The strange thing for me is how much time we spent in the early 2000s discussing website responsiveness and quick loading times as ways to improve user engagement and productivity. Although I can't provide any statistics that I'm intimately familiar with, I recall reading numerous case studies where improvements in responsiveness resulted in significant productivity gains for end users. If I recall correctly, this wasn't just about dial-up connections and multi-second page loads. This belief was still prevalent even when discussing sub-second responsiveness.
Perhaps the direction of the case studies started to shift, and we stopped hearing about it. However, it seems to me more like we pushed hard to reach a certain level of speed in our computer usage, then became complacent, and have been regressing ever since.
I don't have any data on it but I think people gradually came to accept the slower loading times as a reasonable cost, in return they got true multimedia and the fat client experience (first with flash, then jquery and so on) which was impossible in hypermedia.
Currently node unifies (or seems to unify) the FE and BE into something that looks pretty worrying (or rather alien) to someone who grew up with LAMP stack and CGI for dynamic content.
I've literally started using Word and Excel less often because of just how long it takes them to start up. Like, I just want to write a quick document or edit my CV, why do I have to sit here and wait for 10-20 seconds??
Electron apps don't have to be shit; VS Code demonstrates this. But the VS Code people are also insanely performance-focused; your average app developer does not care.
The thing is, users do care, they just don't understand how to articulate it. The Doherty threshold is real, and it's baked into our physiology as humans.
So it does bother them, it's not 'meh', it's just the status quo. Every once in awhile you run across an application or website that's fast, and it's jarring how much better it feels to use. That's something worth striving for.
As noted by another thread, the Notepad example is surprisingly telling.
My initial gut was to blame the modern drawing primitives. I know that a lot of the old occlusion based ideas were somewhat cumbersome on the application, but they also made a lot of sense to scope down all of the work that an app had to do?
That said, seeing Notepad makes me think it is not the modern drawing primitives, but the modern application frameworks? Would be nice to see a trace of what all is happening in the first few seconds of starting these applications. My current imagination is that it is something akin to a full classpath scan of the system to find plugins that the application framework supported, but that all too many applications don't even use.
That is, used to, writing an application started with a "main" and you did everything to setup the window and what you wanted to show. Nowadays, you are as likely to have your main be offloaded to some logic that your framework provided, with you providing a ton of callbacks/entrypoints for the framework to come back to.
353 comments
[ 3.8 ms ] story [ 266 ms ] threadHe mentions Linux in the blog post. But then goes off on a tangent about cross-platform programs. I think he must be primarily a windows guy or something? In general cross platform programs suck, it is well known, so everyone avoids them.
For my laptop, I’ve used i3, polybar (to get pretty bar at the top), rofi (a fine launcher), autorandr (detect and switch to my monitor and turn off laptop screen when I plug in), and… a random Arch Linux forum post to get automatic accelerometer based screen rotation going.
https://bbs.archlinux.org/viewtopic.php?id=243005
I bet there’s a fancy tool out there but this script seems to work after a little customization, and it is only a couple lines, so it can be understood!
I use the multiple desktops feature a lot, though. Some programs are pinned to a dedicated desktop and run all day. Others I start in (or move to, later) a numbered desktop, and switch to them by changing the desktop. Often, most of the desktops contain only one window.
I once used i3 and sway the right way, of course. I guess I had one too many of those programs that were not designed to work at arbitrary window sizes, added the above rule and called it a day.
However, I have never analyzed which are the exact causes, because my configuration has a lot of differences and I am not sure which of them matter.
I suppose that it is important that I use neither Gnome nor KDE, but XFCE. Even so, some of the applications that I use are intended for KDE or Gnome, so they use the corresponding libraries, and I do not know if these have any reason to be more responsive under XFCE than under their native desktop environments.
I prefer to use a completely empty desktop, without icons or toolbars and having as background a neutral gray. I launch applications by right click on the desktop and I restore minimized windows from an auto-hidden taskbar.
I take care that there are no active services/daemons besides those that I really need. I do not use systemd or anything associated with it. I have stopped using swap memory two decades ago (but I equip all my computers with generous amounts of DRAM, to avoid out-of-memory situations; my oldest computers have at least 32 GB and nowadays I would not buy one with less than 64 GB).
I use only 4k monitors with 30-bit color, so using lower resolutions is not needed for a snappy GUI.
I use the proprietary NVIDIA drivers or the Intel drivers on computers with the integrated Intel GPU. I use a customized Linux kernel, but I doubt that this can have any influence on GUI responsiveness, even if it ensures fast boot times. I do not use Wayland and I doubt whether it is the right replacement for X Window, because its initial design was very flawed, even if some of the original defects have been corrected meanwhile.
For viewing PDFs or EPUBs, I use MuPDF, which is much faster (especially on startup, which is instantaneous) than the other viewers that I have tried. It has some limitations, so I also keep around other viewers, e.g. Okular, for the cases when I need a feature not provided by MuPDF. As file manager, I use Xfe.
Personal anecdote: my laptop (6 years old and outdated long before it was manufactured) was thrashing with 99% ram used and disk bandwidth maxed out due to a combination of a 100-tab Chrome monster and doing pacman -Syu on my Arch Linux WSL (I think it might be fixed now, but some time ago WSL file cache would eat all your Windows ram). After accidentally clicking on a pdf document Sumatra somehow still managed to open it in roughly 100-200ms.
I think it might be the only Windows program where I've legitimately been surprised by it's speed.
Why oh why won't Apple let you turn this off? It annoys if not nauseates so many people.
This is is just one example, but indicative of their mindset, why I dislike Apple, and use linux whenever I can. It's such a calming joy to switch instantly between desktops without the rushing-train effect.
This makes the train effect go away, but there is still another very slight fade-away effect when switching desktops, albeit much less annoying.
It was once possible I think, but it seems that's impossible on new versions of macOS. Spaces are unusable because of that as a programmer. I'd love to have a terminal in one space and browser in the other, but the delay in switching between both is very noticeable and considering how many times I'd do that it'd probably take minutes off my day.
That being said, if you do decide to use spaces, I want to point out a MacOS setup that would help you to keep apps on different spaces and have an experience (slightly) closer to i3wm and other window managers.
First, you should create 10 spaces. Then go to Settings -> Keyboard -> Keyboard Shortcuts -> Mission Control -> Expand the Mission Control dropdown. You'll see options to set keyboard shortcuts for each workspace there. I've set it to Option+{1-9, 0 for 10}.
Then just open some of the permanent apps you use, and right click on their Dock icon -> Options -> Assign to this desktop. I keep the browser in workspace 1, and messaging app in workspace 10.
I know this isn't the best solution, but behind crazy-hidden settings, it is possible to get a pretty decent solution for window management on macOS. Ohh also, I use Amethyst sometimes, for i3wm-like window layouts, and it allows you to set shortcuts to move apps from one workspace.
Which is weird, because the launchpad page switching animation can be disabled and it is very similar to the Spaces animation.
It is amazing how much snappier the os feels by just removing those dock and "genie" animations from the interactions.
defaults write com.apple.finder DisableAllAnimations -bool true
defaults write com.apple.dock launchanim -bool false
defaults write -g NSWindowResizeTime -float 0.001
defaults write com.apple.dock expose-animation-duration -float 0.1
defaults write com.apple.dock autohide-time-modifier -float 0
defaults write com.apple.mail DisableReplyAnimations -bool true
etc. Look it up.
More to the point, I should be able to pick and choose which animations I want, install my own or 3rd party ones, etc, ie as far as possible, my computer should be controlled by me, not Apple.
On Ubuntu, I just know where am I and where are the things, while on Windows I have no idea.
It is also long finished by the time my finger is away from the switching key. And that is very relevant. I have no idea what Apple users experience, and "desktop switching animations" aren't all the same thing.
Much worse: Mac OS fullscreen mode works by moving the current window to a new virtual desktop while hiding the statusbar etc, meaning you always have a one-second delay when entering and leaving fullscreen, with videos on Twitter and some other sites it's even slower. But the UI is responsive sooner than that, so recently I accidentally minimized all applications by clicking while the screen was still completely black.
Animations are difficult to get right, I always err on the faster side because waiting for an animation to finish is never enjoyable.
Slack on the other hand...
</nitpick>
(https://www.youtube.com/watch?v=z-o9MqN86eE#t=5m42s)
Also the internet wasn't as big a thing so marketing hadn't taken over computing yet.
Java it's an exception. Every company and his granma used that.
Ugh, this hurts my soul. I've worked with way too many designers who simply had to use their own icons and menus and scroll bars and drop-downs and on and on. Yea, let's throw out the person-centuries of interaction design research that the OS vendor put into the standard controls so that you, 3 years out of design school, can impose your "improved" version of them.
My guess is no, since for many writing FOSS software is just a way to hone their saleable skills for BigCorp where they'll spend their days finding new creative ways to put ads in front of people's eyes.
This is not an illusion. Cross-platform programs suck, so everyone avoids them, right? Electron apps and whatnot are universally mocked. You would only use one for an online services like Spotify or something. The normal use case is downloading some nice native code from your repo.
The thing is, cross-platform tooling sucks. A plain CLI program is already bad enough to get running across platforms - even among Unix/POSIX compliant-ish platforms, which is why autoconf, cmake and a host of other tools exist... but GUI programs? That's orders of magnitude worse to get right. And games manage to blow past that as every platform has their completely own graphics stack.
Electron and friends abstract all that suckiness away from developers and allow management to hire cheap fresh JS coding bootcamp graduates instead of highly capable and paid Qt/Gtk/SDL/whatever consultants.
Who?
I see people constantly talking about those "consultants", yet what they are?
Just dev that has single-person company?
If they can't afford to write a simple cross-platform QT5 based software for actual computing (AKA desktops except for niche usage on art with iPad for drawings and some audio production), they are doomed. Period.
They are not the people that create the software you install on your machine. That task is usually done by a lone developer at some random place.
Producing the best possible software doesn't produce the highest possible revenue. You'd want to produce something that works well enough that it's viable for the customer to keep hiring your consultants, but also makes it necessary to continuously keep hiring them.
So that translates to producing the worst possible software that barely works. So no, they're not $100B companies for nothing. They know exactly how to walk that line.
I have seen genuinely passable. And lots of "good enough until we fix the underlining issue".
What I have never seen is offshored developers doing really good work. And I'm convinced their incentive structure will always punish anybody that tries.
But we're a relatively small consultancy (think hundreds instead of tens of thousands like the bigger players), so it's a bit more refined. We do have decent developers, but the issue with consultancy on that level is they're too smart for their own good, they will suggest an over-engineered solution that can't be maintained by anyone BUT these consultants and / or hired self-employed people. It's a weird fallacy, a weird rotating door of consultants and cycles of development where every 10 or so years they do a full rearchitecture / rebuild of their back-ends, while meanwhile some people just sit and maintain the existing - and working - core systems.
It's massively wasteful. But it usually pays better than a regular in-house developer, and it's lower risk than going self-employed because you still work for an employer who pays you per month. I'm just salty that said employer creams off 2/3rds of my hourly rate.
No, they don't always suck. As an example, QT is cross platform, fast and complete.
But Electron is god awfully slow, and Eclipse can be too. The difference is QT apps are compiled and are generally written in C/C++, where are Electron and Eclipse are interpreted / JIT'ed, and use GC under the hood. As a consequence, they run at 1/2 the speed, use many times more RAM and to make matters worse Electron is single threaded.
The problem isn't cross platform. It's the conveniences most programmers lean on to make themselves productive - like GC, or async so they can avoid the dangers of true concurrency, or an interpreter to so they don't have to recompile for every platform out there. They do work - we are more productive in turning out code, but the come at a cost.
Maybe Tauri will make things better in the long run, but so far I haven't heard of any adoption at all.
Except our organization builds python and java apps so all our shit is multiplatform by default or even by accident. Hell, I put together consistent, cross platform Swing UIs before I even understood what maven was.
Despite or because of emacs being older, it's more responsive than vscode in my usage.
https://github.com/microsoft/vscode/issues?q=is%3Aissue+labe...
Vscode is fast compared to most modern editors, but it's still twice as slow as Sublime in terms of input latency, UI responsiveness, text coloring etc.
An hour with Sublime/Vim followed by going back to Vscode is a painful experience...
Various language-specific IDEs like Spyder ?
Jetbrains' products.
https://kate-editor.org/get-it/
The first Linux that I've used, Mandriva (KDE), runs smoothly on my Intel Pentium 4 PC with 256MB of RAM. I can even do some web browsing (Flash gaming) and music playing without feeling slow. That's an entire OS, running on 256MB of RAM.
On MDV, KDE and PIV, same here with an Athlon 2000 and 256 MB of RAM with Knoppix and later FreesBIE with XFCE, which ran much faster and snappier than even today's i7's with Plasma 5.
I think there’s an important additional factor, which is how dynamic so much UI is these days. So much is looked up at runtime, rather than being determined at compile time or at least at some static time. That means you can plug a second monitor into your laptop and everything will “just work”. But there is no reason it should take a long time to start system settings (an example from the article) as the set of settings widgets doesn’t change much — for many people, never — and so can be cached either the first time you start it or precached by a background process. Likewise a number of display-specific decisions can be made, at least for the laptop’s screen or phone’s screen, and frozen.
Here’s some sobering perspective on this from 40 years ago: https://www.folklore.org/StoryView.py?story=Saving_Lives.txt
On any of the complex Linux DEs, the set of settings widgets was always set at startup, since those complex DEs existed. On Windows that varies from one interface to another (there are many), but at least for Win10, things have gotten much more static on the new interface. (I dunno about 11.)
Anyway, the amount of things you can read from the user on a Windows app startup time is staggering. The applications on the article have many orders of magnitude less (relevant) data to deal with.
Say I have two monitors plugged in and running. When I plug in a third one, here's what happens:
1. Monitor 2 goes blank.
2. Monitor one flashes off then back on.
3. Monitor 2 comes back on.
4. Both monitors go off.
5. All three monitors finally come back on.
Putting on my developer hat, I kind of know what's going on here. The devices are frantically talking to the device drivers, transmitting their capabilities, the OS is frantically reading config files to understand where to display the virtual desktops, everyone is frantically handshaking with everyone else. It's a terrible design and should not be excused. Putting on my end-user hat, what the fuck is this shit? I just plugged a monitor in. I'm not asking the computer to perform wizardry.
I don't believe it is. Sure, it's probably necessary in this frameworks of frameworks systems we're running right now. Drivers, kernel, privilege levels, userspace, whatever. But I believe if we were to rewrite everything from scratch without the 90s technical debt and careful planning beforehand it would be easy to have a dynamic monitor connecting algorithm which doesn't suck like that.
A promising concept in this space: (me not affiliated) https://www.theseus-os.com/Theseus/book/index.html
Another quibble I have with the article is the statement that the visual effects on macOS were smoothly animated from the start. This is not so. Compositing performance on Mac OS X was pretty lousy at first and only got significantly better when Quartz Extreme was released with 10.2 (Jaguar). Even then, Windows was much more responsive than Mac OS X. You could argue that graphics performance on macOS didn't get really good until the release of Metal.
Nowadays, I agree, Windows performance is not great, and macOS is quite snappy, at least on Apple Silicon. I too hope that these performance improvements aren't lost with new bloat.
I'd suspect a lot of this is offloading so much of the graphical setup to not the application. Feels like we effectively turned window management into system calls?
The difference you show depends on the internet connection, on slow wifi I've seen this delay go over 0.7s in the past. But again, just the first time, which is a problem for developers who recompile their code frequently but for the end user experience that's not as relevant.
I thought it's common knowledge that starting apps for the first time after reboot or after doing something else is slower and usually it's explained by the app being in cache for the next launch. But here the it can't be cache, because reading anything from SSD can't be that slow and it should already be in cache anyway.
The comparison is using OS X 10.6 - I used to daily drive it and it was pretty snappy on my machine - which is corroborated by this guy's Twitter video capture.
As for Windows performance - Notepad/File Explorer might be slower than strictly necessary, but one of the advantages of Windows' backwards compatibility, is that I keep using the same stuff - Total Commander and Notepad++, that I used from the dawn of time, and those things haven't gotten slow (or haven't changed lol).
Unlikely, yes, but that sort of thing comes up in security reviews.
Anyone who has worked on optimizing complex programs knows that you can do a lot with a computer. > 100 ms latency to open Notepad is just ridiculous.
I'm very happy with my M2 Mac. It's a giant leap forward in performance and battery life. But Electron is a giant leap backward of similar magnitude.
Note: The main reason is that Notion is fantastic but too much for me. I'm not that organized...
If Siri is enabled, the OS waits until you release the space bar to determine if you performed a long or a short press, which causes Spotlight to be delayed.
While this may not be the only explanation for why this trend continues, I think it's *spot on* to explain why this continues in commercially-funded software.
On one hand, lag is real. I rebooted my M1 Mac mini yesterday running Ventura, and while it only took a few seconds to boot to the desktop, it took, like, two minutes for it to stop beach-balling and finish initializing. (It was most likely waiting on network I/O to finish, but still.)
On the other hand, machines are faster than ever before while doing more than ever before, and apps are more flexible and change more quickly (largely in part to super approachable cross-platform frameworks like Electron). A few milliseconds of UI latency will bother almost no-one.
On the other _other_ hand, Julio's demo of using Windows 2000 on an time-appropriate machine is best case. I definitely remember waiting what felt like eons for lots of useful apps to load, like Office and Internet Explorer. (Remember when browsers had startup screens?)
He's definitely right about how far hardware has come since 1999.
The shift to Apple Silicon was even more transformational than the transition to SSD, IMO. Julio's right in that the shift to SSD was night-and-day, but going from an Intel Mac to an Apple Silicon Mac sped up literally everything you used to an insane degree AND you got 12+ hour battery life to boot.
This used to be an either-or kind of trade-off, and for Windows devices, it still is.
To wit: I used an Intel Mac Pro (the trash can) last week for some audio work, and that super expensive almost-server-class machine was _slower_ than my base model M1 Mac mini at home, while running (slightly) louder and hotter!
On the forking hand (distinct from your "other _other_ hand"), the "doing more than ever before" neatly cancels out "faster than ever before", which prompts a question: how useful is whatever it is our machines are doing now? Because one thing is clear: most of that extra work is not visible to the user. The increase in software capabilities is much, much smaller - nowhere near enough to explain where all the performance goes.
We could break the extra work into several categories:
- Support for better hardware - e.g. higher-resolution screens require more RAM (somewhat compensated by GPUs), and require higher-resolution assets to maintain (not even improve on) decent clarity, which has second-order effects on storage use (partially offset by compression) and CPU use on decompression (the price of offsetting storage use), etc.
- Security features - cryptography, secure protocols, isolation, sandboxing, etc. - those all cost CPU and memory.
- "Security" features - "real-time" malware scans (bane of my existence), shady anti-virus/firewall software (i.e. almost all of it), and various other parasites living off people's fear (or need for regulatory compliance), and convincing users to pay them with money, time and compute. Not (x)or, and.
- Legitimate new features - handling more type and variety of content, more advanced algorithms, etc. Continuous auto-saving and collaborative editing are two big and perhaps underappreciated generic advancements.
- ... ???
The first four items on the list don't seem to account for all the performance loss, especially for software that doesn't do things requiring modern security, and offers the same set of features as its equivalent 10 or 20 years ago. Often less features, even.
That last point, the "dark matter" of computing, needs more detailed study. We can guess a chunk of it is developer convenience, but that's not all of it either.
WRT. developer convenience - as a developer, of course I like it, but it's really getting out of hand - at this point, whatever I buy for myself by externalizing the cost on users, I still lose because I'm also the user of development tooling, and those developers externalize on their users too...
I suspect this would fall apart the instant you try to rigorously quantify it. Put an actual number on how much faster machines are, and put an actual number on how much more useful stuff is happening. I cannot imagine that all of the slowness could be accounted for. I doubt you'd even account for 10% of it.
>A few milliseconds of UI latency will bother almost no-one.
No, this mindset is a death sentence for good software. All it takes is a few people at each level of the stack making the same excuse. Five milliseconds here, three milliseconds there, ten milliseconds, surely nobody will notice. But it all adds up (or worse, it multiplies in some cases).
To pile on to this, it's not just five milliseconds here and there in your application but its position in the rest of the system. Your application's 5ms regression is tested on an unloaded machine (for example). That means you lost 5ms on an unloaded machine with all its considerable resources available.
That regression is very likely to be much larger in a loaded system where your process is contending for resources. On a loaded system your 5ms regression becomes a 20ms regression along with everyone else's 5ms regression. So now the user is sitting there wondering WTF is happening.
There's a pretty good chance your GUI application will be running on a mobile device of some sort. This means it's running on a device with power limitations. The CPU might be vastly underclocked to save power or you could be running on an efficiency core instead of a more powerful performance core. Now your 5ms performance regression is possibly 100ms. A couple such regressions that "don't matter" on the 3GHz test desktop become significant on the user's laptop with 15% battery remaining that's clocked the CPU down to 600MHz.
Performance regressions should always be a concern and testing should to encompass the pathological worst cases. Even if there's nothing you can do about performance regressions (that 5ms of work is exploit mitigations or something) they should at least be quantified and understood.
I agree completely.
It's definitely disappointing that simple programs like Notepad and Paint are now laggy (I can reproduce the exact same lag on my 2-year old 16-core i7), but computing in general was SLOW back then.
Booting a computer often took over 5 minutes. I'd turn it on, prepare a drink and come back to the desktop partially loaded with a laggy 'wait' cursor waiting for my startup programs to finish loading. Launching larger programs such as Word took more than a minute in some instances. You're playing music AND want to open another application? Well that application will open 2x slower now due to lack of RAM.
I'd love to see a comparison of a current version of Word on a current machine opening vs Word 2000 on a 2000 machine.
Discussion from a few days ago based on the original Twitter thread: https://news.ycombinator.com/item?id=36446933
I've not started an app so far today, not sure I did yesterday either for that matter. I certainly created plenty of tabs in chrome, and new terminal windows, but those just pop as instantly as far as I can tell.
Oh, and i'm on MacOS
I find that many desktop GUI programs are slightly misbehaved for whatever reason, and consume some small but real amount of resources when idle in the background. When a dozen are open response time will be poor.
Standups, one-on-ones, team fika, NIH, retros, agile retros, incident post mortems, cross-team fika, town halls, pool/billiards, table-tennis, and testing-in-prod.
Because the old software is missing 80% of the features needed today.
It's like comparing a go-kart (simple, fast, easy to use) with a car (big, slow, complex). Yet you don't see people in go-karts.
Ironically Spotify and the rest of the Electron turds barely cover the 10% of what we did with Amarok and KDE3 with Kparts and using 10% of the resources.
What we are seeing it's people using damn 18-wheelers with less features than a tricycle.
Opera for instance was propietary but it even had a Torrent/Email client while being usable even under a Pentium 4 at amazing speeds.
Now try that today with Vivaldi.
More IM. Pidgin. Bloat it to the extreme with 4 or 5 or even 10 protocols being run at once while adding lots of plugins such as services for Google Translate, inline videos or HTML parsing until it uses ~512MB of RAM. Still it runs far snappier than Discord, it uses 4X less RAM and a simple Athlon/Pentium III can drive literal thousands of conversations in parallel.
On my Win 10 machine with an SSD and animations turned off Notepad and cmd do launch almost as fast as in that NT demo so maybe it wouldn't be much of a difference.
I don't think just adding features means software must be slower. I would venture to guess Emacs has more features that Word, especially when you factor in plugins, and is significantly faster than Word.
(There's an averaging effect to. That game paying customer might like it if Windows was snappier, but in that market they're just another voice in the crowd of people who on average are satisfied with the current status quo.)
"Paying customer" is important too because you can almost measure how much social power the user has by how slow the software is. Why is the point-of-sale device in the checkout miserably slow? Why does the device the desk receptionist is using at your national-scale bank need 30 seconds just to pull up your appointment information? Those people have no social power, so they get to just sit and wait while the computer swaps things in and out for a truly simple task. Executives get machines that can switch between email and the browser in a heartbeat with the other 24 gigs of RAM and 6 cores do nothing. Using what machines the developers get as a metric for how much the company cares about them is something smarter developers have been doing for a while; if your developer interviewer uses the 8 minutes it takes their machine to boot to sing the praises of the engineering culture the company has, well... make appropriate judgments.
(In 2023 this almost impresses me. Setting up a computer that needs 30 seconds to switch between a calendar and an email is almost a challenge now. You need to harvest those last few precious $10/unit to give them really shitty hardware and combine it with an almost sociopathic dedication to layering on enough virus scanning and tracking software to slow down a cheap machine even so. Even the cheap stuff shouldn't be that slow!)
If you work at it even a bit on Linux, you can set up a very responsive system. You've been able to for a long time, really. But you may find you don't get to use the latest and greatest of the heaviest weight desktop system at the time. It's a lot easier on Linux to use the stuff from years ago that flies now. Emacs use to be joking referred to as "Eight Megabytes And Constantly Swapping"; now it's a "light-weight" text editor. (Though it doesn't quite start instantly for me, it is under a second in my configuration. YMMV.)
This is not the case, he specifically debunks it it in the twitter thread. He took a contemporary late 90s machine with modest specs, and it was still snappier than the modern PC with Windows 10.
And even if that were the case, it does not follow that we should accept modern machines not being able to load Notepad instantly. Modern machines are hundreds of times more powerful than 20 years ago, but Notepad has not become hundreds of times more featureful.
"accept"
I'm a bit at a loss as to how anything I said sounds like we should accept this. Did I not call it almost sociopathic how IT departments manage to slow machines down for people who have no social power? Does that sound like I think this is hunky dory?
Just to point that all the GP said is that we do accept. There's nothing there about what we should do.
It is a sad commentary about human nature, because it suggests a slow enough decline will be accepted.
Windows always used to have that fresh lightweight install vibe. But as soon as it started indexing, doing updates, and virus scanning it would drag to nothing. Along with all those system tray apps that would take an age to fire up.
Partial suspend to disk made things boot faster. Like not doing the whole driver scan thing on boot. I don't know if Linux has ever taken this on board. It's a blessing and a curse as Windows doesn't like being ported to another machine, whereas my Debian disks I can swap between some desktops and laptops without much issue.
There's also that weird delayed animation thing, that is meant to feel like polish. But slows down desktops. Weird animation effects and what not. I tend to run XFCE and turn off any thing like that.
I'm using a Chromebook right now and this is an old machine, but still feels pretty snappy. Certainly weird and wonderful experiences between hardware. I have High Sierra on an SSD on my Mac Mini, and that's slower by far to boot than my Linux Arch box on the same age hardware. Having said that the UI always feels more responsive as it's tailored for that.
Linux suffers lots for me with kcompactd or whatever it is. Some weird memory disk swap stuff. If I accidentally code an infinite loop my machine turns to complete mud, and takes about 5 minutes to recover. Whereas it boots to the browser in under 1minute. Weird huh?
I put Alpine Linux on my laptop that has 1 GB of RAM and I can actually have a lot of stuff running at once, especially in the terminal (Emacs, SBCL, w3m, Deno).
But yes, opening Firefox consumes all available RAM until I have to power off the machine, sadly. The lightest weight, but functional browser, I've found is Midori, but I probably wouldn't trust it for, say, accessing my bank account.
It's depressing because I was initially blown away at how fast (and productive) old hardware can be... until I tried to use the web.
Oh how times change.
The architect wanted to break everything up into extremely small pieces, small enough pieces that many were dependent on each other for every single call. Think "a unified address service" to provide an physical address via an identifier for anything that had an address (customers, businesses, delivery locations, etc).
The problem was that it turns out when you're looking up a customer or business, you always need an address, so the customer service needed to hit the address service every time.
Disregarding the fact that this whole thing was a stupid design, the plan was that when you hit the customer api, the customer code would make internal http calls to the address service, etc.
I pointed out that this was a ton of unnecessary network overhead, when all of this information was sitting in a single database.
The whole team's argument was effectively - "it's 2015, computers and networks are fast now, we don't need to worry about efficiency, we'll just throw more hardware at it".
The whole thing ended up being scrapped, because it was crippled by performance issues. I ended up rewriting the whole thing as a "macroservice" which was 60000% faster for some particularly critical backend processes.
Anyway ... I think that mentality is prevalent in a lot of people involved in technology creation, technology has improved so much, moore's law etc etc etc.
So let's not worry about how much memory this thing takes, or how much disk space this uses, or how much processing power this takes, or how many network calls. Don't worry about optimization, it's no big deal, look at how fast everything is now.
Just look a bit further down the front page of HN today and you'll find a legitimately-heated debate regarding whether ORMs bring value or no. But, who can blame the developers? The pressure from management is eternal and some of us like to spend our time on non-computer problems too. Reaching for a JSON serializer or ElectronJS over Win32 and raw SQL is an understandable decision when presented with real-life pressures.
I think if we want to see good user experiences, the capitalists and management will need to start prioritizing them again (at their own expense). This is a very difficult narrative to sell, but I've had some traction in my company with "higher order consequences of good UX today means more sales in the future" kind of talk. There is also a story about pride in the product and the improvements this brings for internal operations. Imagine if your executive leadership came into the room, smack talked the electron JS pile and insisted it be rewritten from scratch while targeting native toolchains? Would that be enough of a fire to get the average developer to start thinking again or are we too far gone at this point? Clearly, we are mostly beyond the phase of "valiant developer works overtime to strive for better UX despite any and all mgmt pressures".
I worked on the Shell team until late 2022. There is very little C#, if any at all. The vast majority of the Windows Shell is still C++ with a significant amount of WinRT/COM.
What I had in mind when I wrote this sentence though is how the modern apps that people seem to like /are/ C#, such as Windows Terminal and PowerToys, and these feel quite slow to me. But, yeah, calling those the shell is a stretch.
PowerToys is mostly C# though, which I have also verified now.
In the days of programs taking forever to load or web pages downloading images slowly we knew what technical limitations were there.
Now we know how much sluggishness comes from cruft, downright hostility (tracking), sloppy developer work, etc.. we know this is a human problem and that angers us.
But for non-technical people it hasn't changed too much. Computing wasn't super pleasant 25 years ago and it's not now. Instead of waiting half a minute for Word to load they wait 4-5 seconds for Spotify to load. They were never interested in Notepad or Cmd or Paint. It doesn't bother them that now they open slower than in 1999.
The quality bar is so low now, it went underground. It's so easy to compete with the status quo. You just pretend that all the "progress" that happened in software development technologies over the last 15 years didn't happen. And, most importantly, you treat JS as a macro language for a glorified word processor and don't try to build actual applications with this stack.
When the reality is more cpu/memory usually cleared things up. In the old times a good defrag did not hurt either.
People blame themselves when a lot of the time it is rubish software/hardware.
Then you have the other side of that coin. The yes clickers. If it asks a question just answer it however you need to do for whatever it is you wanted to work. Surprising number of dark patterns on that gem... Then they hand it to you and expect a miracle in 5 mins. Sorry this is the first time I have every seen something like this it may take me a few mins to figure out what is wrong before I can even begin to fix it.
Oh yeah, like when I have to fix the smartphones of people who have been using them for years while I do not own or use a smartphone. I will fix it, but I've got to learn how to launch/exit an application first ;-)
Many people (hi mum!) are surprised that you may take a few minutes to calmly observe, probe, assess, read and think a bit before engaging in the actual fixing. It never occurred to them that one may do something else than clicking, more or less randomly and as fast as possible, when something shows up. And do not worry about your example altering their future behaviour, it will unshakeably go on as it always went :-)
But that phone ran an Android version from before Google started seriously cracking down on apps running background services without restrictions. Modern Android is pretty robust in this regard — with a few exceptions, an app can't run in the background without showing a notification ("foreground service" is how the API calls it).
There wasn't much self-blame. She just assumes that technology is like that, complicated, unreliable, slow, and full of magic. It's nice when it works, but not a huge loss when it doesn't. She would also indefinitely quietly put up with things not working until someone asks and finds out, then I'd fix it.
Computers have always been just useful enough for as long as I’ve used them (since the 80s). We’ve _always_ put up with a lot of nonsense and pain because the alternative is worse.
It actually was a very weird feeling because the scroll itself was way smoother than on the iphone, probably thanks to the somewhat higher refresh rate. But there was a noticeable and weird lag between my finger movement and the screen contents moving. Also, scrolling would sometimes randomly glitch for no reason in basic apps, like the settings.
And no, I'm not an Apple fanboy, rather a NixOS nerd but I need a phone that reliably works.
So, how do you get rid of that bloat? I've tried removing all the apps I could, but it didn't make any difference.
Before my iphone, I used to have the GS1, 3 and 5 with custom ROMs. My fondest memory is of Slim Rom on the GS3. It gave it back its life. Before the A33, my mom used to have a GS4 mini with LineageOS. It ran circles around the stock version, even though it was a newer Android version. I think the A33 wasn't supported back when I bought it, so I left it with its stock ROM.
Before my iphone, I used to have a GS5 with LineageOS, too. I don't remember the iphone being noticeably better for touch-related lag, which is why I was so shocked when comparing with my mom's brand new phone.
They also don't bat an eye when lazy devs recommend we should reboot the servers daily. They put up with laggy VNC when they have a perfectly good remote desktop solution set up.
I guess, if it sorta kinda works, people just get used to it. The fans blowing like a jet engine. Apps taking forever to load. Windows getting stuck for no discernible reason.
I think some of this is just poor defaults. Every windows laptop I've had in the last 10 years has defaulted to a thermal management profile that ran the fans aggressively. Usually you have to install some crapware from the manufacturer (it's "Dell Optimizer" on my current machine) that allows you to change the thermal profile to quiet mode, and it's totally fine after that.
So, I don't think it's just a question of fan profiles. Plus, on Linux, I can't control the fan. I can't even read its speed. On Windows, they have all the "recommended" HP crap, but it's true that I didn't fiddle with those, and I doubt my colleagues did, either.
---
[0] I do use Windows rarely, but when I do, it's for fairly long stretches (multiple days on end) so it has the time to do its scanning, updating and whatever elsing.
On other stuff Windows does in the background, I managed to disable Defender and the updater on my VM by deleting their files via the recovery mode command prompt. That seems to be the only reliable way to do that.
Also unlike Windows Search, it doesn't default to "search a few of the most common locations and either take a random number of seconds to realise at least one of the search targets was already displayed in the current folder where you started your search or claim that nothing was found (when one or more actually matches exist)".
Perhaps the direction of the case studies started to shift, and we stopped hearing about it. However, it seems to me more like we pushed hard to reach a certain level of speed in our computer usage, then became complacent, and have been regressing ever since.
Currently node unifies (or seems to unify) the FE and BE into something that looks pretty worrying (or rather alien) to someone who grew up with LAMP stack and CGI for dynamic content.
Enter htmx to turn the tide again.
Doesn't htmx use server side rendering for everything? So every interaction incurs a network roundtrip?
Electron apps don't have to be shit; VS Code demonstrates this. But the VS Code people are also insanely performance-focused; your average app developer does not care.
So it does bother them, it's not 'meh', it's just the status quo. Every once in awhile you run across an application or website that's fast, and it's jarring how much better it feels to use. That's something worth striving for.
My initial gut was to blame the modern drawing primitives. I know that a lot of the old occlusion based ideas were somewhat cumbersome on the application, but they also made a lot of sense to scope down all of the work that an app had to do?
That said, seeing Notepad makes me think it is not the modern drawing primitives, but the modern application frameworks? Would be nice to see a trace of what all is happening in the first few seconds of starting these applications. My current imagination is that it is something akin to a full classpath scan of the system to find plugins that the application framework supported, but that all too many applications don't even use.
That is, used to, writing an application started with a "main" and you did everything to setup the window and what you wanted to show. Nowadays, you are as likely to have your main be offloaded to some logic that your framework provided, with you providing a ton of callbacks/entrypoints for the framework to come back to.