Microsoft’s problem isn’t how often it updates Windows, it’s how it develops it
arstechnica.com
arstechnica.com
While it might slow down some of the feature work, I think it's clear that an always release-ready master branch is the path forward for Windows. Some of my more enterprising managers were already working on splitting our subfeature out of the Windows release tree just so that we could do that when I left a couple months ago. I hope they succeed, otherwise I worry for the future.
The stuff you and your (now former) colleagues have put up lately is remarkable. The last version of Windows I used on my home machine was Windows 2000, and Windows 10 is the first one I've looked at since then and said you know, I could actually use this thing, I guess.
I don't trust your (former) bosses enough to make the switch, but you folks have done some pretty amazing stuff lately.
Shuffles back to corner. Furtively plays with new TypeScript toy. Hisses at passerby.
I was a teenager.
One thing I’ve come to realize is that MS definitely excels at programming language design, coming out of college I had no experience with the MS CLR languages and I was pleasantly surprised at how well designed and usable their languages are.
Remember when we were allowed to customize our own color themes?
This is the norm in the software industry. As grunts or lower management getting tasked with the impossible, saying "yes" and doing "maybe" is really the only way. What they (upper management) gonna do, fix it themselves?
And then, of course, for the PM's and upper management layers, the fact that their project "met the date" is what is measured and congratulated all around. The product could be a stinking pile of XXXX, but "it met the date", so they get their kudo's, their bonuses, and the devs. and users are left with "stinking pile of XXXX".
About ten years ago I had the option of taking the red or the blue pill. I took the Windows pill by mistake.
Or maybe I just blame capitalism, haha. No deadlines! I do this because I like it!
Yes, they should have. adding tests long after the fact is next to impossible because, when you spend a long time not adding them, your codebase tends to degenerate into an untestable mess. One of the key benefits of strict TDD is that you feel the pain of testing your code before you write it, so your code is testable from the start.
How else do you prevent people from overwriting each other's changes to the same data? Whether the lock is at the file level, field level, etc., how else do you manage collisions? It seems so obvious that perhaps I misunderstand your question.
This allows running programs to be updated.
My other two top annoyances, for anyone curious, are the appalling filesystem performance and the high process-creation overhead.
However, Windows does allow you to rename such files. So you can rename an existing file to some random name somewhere in %TEMP%, and then put a new file with the same name in its place.
From my understanding with how the winsxs store works, almost every system binary is really a hidden symlink to the right binary in winsxs (with some having different cpu optimizations).
One of the cool things about symlinks is handles don't hold on them, they just hold on to the target, so you can change a symlink target without interrupting or getting blocked by handles that have that symlink open.
Windows update could put all the new binaries in to new winsxs loctions then just swap over all of the symlinks on next boot.
I know this works because I use it to deploy updates to a running game server binary so that the next time it restarts itself on round end it's using the new binary.
We also update the loaded dlls it uses this way.
As another person said, you can rename opened files and then deal with deleting them separately.
Your Ubuntu desktop only takes security and bugfix updates regularly.
If you've tried going from an Ubuntu LTS to another Ubuntu LTS, 2+ years on, you'd find tons of things changed too -- even if your old LTS had everyday updates.
If MS did commercially release Enterprise LTSC it wouldn't sell. Instead it would just encourage piracy.
Windows follows an LTS model. It can't go changing from under pros and businesses that use it everyday...
> Your Ubuntu desktop only takes security and bugfix updates regularly.
A rolling release explicitly doesn't just provide security updates, so my point is Windows updating more core components than Ubuntu LTS is no excuse.
IIRC on newer versions of the OS, updates are applied on a separate partition without interrupting you. I don't know if it causes performance loss during that time, so far it has been seemless for me but I don't have updates everyday either .. Only when the update completes will the OS asks you to reboot so it can start from that new version.
Sure it uses a ton of storage to do things this way, but it is very secure and pleasant to use.
And JunOS (the juniper network appliance operating system based on freebsd.) has had this since version 10.4 which was released in 2010.
Ubuntu also completely blows itself up into an unbootable state at least once a year after updates.
Windows Update and testing suck, but Linux package management and upgrading suck just as badly. Systemd upgrade bugs seem to cause the most un-bootable systems in my experience, with alarming frequency, even on LTS servers that see little churn.
and on servers (20+ VMs and a few hypervisors, some LTS some not) I had even fewer problems. for me things got especially smooth sailing after ubuntu switched to systemd.
The seamless updates feature originally came from Chrome OS. It's easily one of the best features of that OS.
https://www.xda-developers.com/how-a-b-partitions-and-seamle...
Fun fact: The Android update_engine which handles seamless updates is basically ripped straight from Chrome OS. Only recently were strings containing "Chrome OS" removed from update_engine’s log to avoid confusion for anyone who happens to check logcat.
I have often wondered if Microsoft could use this type of system for Windows 10? Not only would it make the update process more reliable, but faster too (especially when it comes to feature updates).
The other thing Microsoft should sort out is WSUS. It is such a flaky system!
From what I understand this isn't far from what Windows 10 does? Windows doesn't use a separate physical partition because it can't trust any specific OEM or user to follow a specific partition scheme, so it uses something more of a "virtual" overlay in NTFS for big Windows changes, based on how I understand it. It's something like a partition scheme in that it virtualizes entire directories (like C:\Windows) and then swaps them. For dumb backwards compatibility reasons, Windows can't just assume that it can just outright swap one C:\Windows directory for another one, so supposedly a lot of the time in major updates is stuff like inventorying directories like C:\Windows for non-Windows stuff and copying it across to the new pseudo-partition before the swap.
I've always wondered (seriously, not rhetorically) which are the technical grounds that make Windows update so bad.
In addition to reboot loops:
- WU has a long history of hanging; it took I think a couple of years to release the "final" patch for update hangs. I'm not even sure if it works; I wouldn't bet that a machine with Windows 7 would be able to download all the updates without hanging or taking days (we're talking about around 100 updates; apt, for reference, manages a pool at least 2 orders of magnitude bigger)
- the workflow is not deterministic; updates may or may not succeed
- the UX is abysmal: the status descriptions are unclear; the progress percentage doesn't reflect the actual time, or is disbalanced towards stages which don't make evident why they take so much time; the error messages are completely unhelpful.
- it's also completely unclear why some updates need to be applied both after shutdown and before startup.
"Thankfully" they gave the option to download them once a month, which all in all, equals to choose between usability and security.
In general terms, I think it's subpar in terms of usability, at least, when talking about "Google standards". Going down to details:
1. the web interface uses a sort of "dark pattern": it enforces delayed updates, to the point of ignoring user requests for refresh; when the user clicks on the refresh button, s/he'll see the spinner in action, but when it stops, there's no guarantee that the updates have been sent - in fact, attempting to close the browser at the point frequently shows a browser alert, then the spinner will spin again for the "real" update. It's a matter of seconds actually, but it gives the impression that the program is "lying" to the user.
2. the automatic recognition is extremely annoying when a note includes numbers and symbols that don't represent phone numbers/email adresses - Keep will forcefully recognize them as such, so that when one clicks on an auto-recognized string, a dialog will pop up, forcing the user to click Cancel, then hope that the landing character is the right one, otherwise, when clicking on another character, the popup will show again.
3. the reminders workflow is bizarre; it assumes that the main use case is the user setting alarms at four semi-fixed (fixed but customizable) times of the day. this doesn't really make sense to me, and adds one extra stage in the setup
4. at some point it seemed they introduced a clever reminders workflow - when the user would add one, the default would be around three hours from creation (with the exception of the night). this is not stable though - sometimes, the three hours interval is not respected.
5. I recently hit a bug where, when I select it from the Android task manager, the window closes.
Point #2 is definitely the worst for me; it really bites me on notes that include numbers and are frequently updated (eg. a gym schedule); I think this is a legitimate use case.
Point #1 may be a bug, although it's in a core functionality, which makes me think that it's intended.
News flash! I've just found a bug. There are four semi-fixed times of the day; but in the settings, one can only customize three.
Practically speaking, I think there isn't (enough) dogfooding in its design. More abstractly, I really doubt that it's up to standards with a company that is supposed to have the best IT professionals in the world.
The rationale goes like this: If you confront users with error messages, they get confused. The more technical the message, the worse the confusion.
Now what Windows does is to hide everything, ignoring that to be able to do that, your systems must never ever have any errors, lest you throw away useful information. I've got a Windows 8 installation I can't upgrade to 8.1 because all the update system does is not install the updates. There's no telling why -- the next time it still sits there telling you "by the way: there are updates you should install".
Contrast this with "user unfriendly" linux updates: They tell you loud and clear that things didn't work and give you a message you can google, if nothing else. OTOH, the Windows side of things involves reading tea leaves, clearing obscure chaches, wondering if mercury is in retrograde, deleting or adding random registry keys and in the end doing a totally new installation anyway.
The contrast with linux is night and day.
That's like me saying it takes over an hour to update my OctoPi instance when I remember to do it semi annually, therefore all *nix updates are broken.
Not only they take ridiculously long, eventually you are forced to update upon booting in or shutting down. Never mind that you turned on your PC to, you know, get something done potentially urgently.
In contrast, I can upgrade my months-stale arch Linux box in under 2-3 minutes. After seeing how much better the same hardware can run, there is no going back.
However, that being said, Windows Update for me as a user that would apply all updates anyway, was unbearably slow, and a big part of the reason that I switched to Linux and FreeBSD years ago and never looked back.
I guess for enterprises that want to deselect certain updates for various reasons relating to their setup, Windows Update is probably a great selling point.
I still don’t get why it has to be so slow for the default case where all updates are applied though.
This could be me being completely ignorant of the details, but doesn't Linux have the same thing? I can individually apply package updates, even mess with dependencies -- but my computer updates quickly and doesn't require multiple restarts during the process. Usually, unless I'm updating the kernel itself, I don't even need to restart.
What are they doing that's even more granular than Linux's update process?
Obviously, this is rather insane and takes up a gigantic amount of disk space, and wasn't something they ever implemented. They must have realised this, so they built a facility into their DISM.exe utility to remove all updates that were superseded by the service pack (the switch is /spsuperceded). DISM.exe was released in Windows 7 SP1.
Note that there has never been, and never will be, a Windows 7 SP2, because Microsoft decided to go with the rolling update schedule. What this means, however, is that /spsuperceded will never work as they have never actually gotten to a second service pack.
It appears to me that Microsoft must have forgotten the original plan for clearing out old and useless patch files from SxS, because they rather surreptitiously introduced a new option into the disk cleanup wizard to remove old Windows Updates (to get to it, you need to elevate to admin via UAC in the GUI). This removes the old updates.
I have literally had systems with around 6-8GB of old Windows Update files. The biggest issue is that you think they are deleted, but it appears that Microsoft actually removes the updates after you reboot. I've had one system that took an hour to reboot as it was removing so much junk. I had a friend who had an even worse system, and he had to leave it overnight...
Here's another fun fact (not sure if it's fixed in Windows 10...) but the WinSxS folder is where system files are kept. NTFS does a symbolic link to these folders back to the System32 folder. The problem is that the metadata is updated in one location only, and so if you check the WinSxS folder and the System32 folder, you'll see different file sizes for each folder.
It creates hard links, not link symbolically.
https://techcommunity.microsoft.com/t5/Windows-for-IT-Pros-M...
The POSIX approach makes it easy to install updates without rebooting but opens you to weird failures if a process loads things during an update and gets the new library A and old library Z. This is generally a much easier problem to handle.
The big thing, though, is that they had a lost decade or so where the stack-ranking system heavily favored new features over improving existing code. Unless this was such a problem that it became a senior management priority I doubt anyone was jumping at touching it.
You can't just replace the files and reboot because you can't write to files while they're open, especially executables; so what happens is a huge pile of files get queued for swapping over at reboot.
I think the main reason Windows Update takes so long is that it has its own database, WSUS, which degrades badly as it fills up.
Considering that Microsoft still does have a lot of really bright engineers, I'm leaning towards the latter.
I have no idea how MS implemented the OS upgrade process this bad.
The fact that they didn't have a mechanism to forcibly install said improvement updates in the older versions before they install the kitchen sink for hours is infuriating, but I can't be that annoyed at them for not rewriting history.
I can, however, be annoyed that they decided never to formally make an SP2 and consequently left anyone running those Win7 environs up shit creek without a paddle, though I imagine that's a bug not a feature, given how afraid they are of another XP.
[1] - https://decentsecurity.com/enterprise/#/windows-7-fast-updat...
Using slapt-get (Slackware version of apt-get) back in the day was quite the revelation after manually solving dependencies.
Because it is way more complicated than apt: https://docs.microsoft.com/en-us/windows/deployment/update/h...
In Windows, can have individual updates to a library that fix bugs b1, b2, respectively b3. If so, you can install eight different variants of that library. If, later, a fix for bug b4 is released, its installer must be able to handle each of those variants. The installer also allows you to roll back any of those patches (example: patch b1, patch b3, patch b2, roll back b1, patch b3, patch b1 again)
In practice, it’s impossible to handle that combinatorial explosion, so you get updates that require b1 to b3 to be fixed, that require service pack x, etc.
However, the system still is designed to handle that. It sort-of must, given that Microsoft occasionally releases updates that it hasn’t tested on all possible hardware configurations, but that (may) solve a specific problem (https://blogs.technet.microsoft.com/mrsnrub/2009/05/14/gdr-q... is dated, but, I think, still illustrates the problem)
Honestly, if Microsoft would fix this one thing, I suspect they could speed up their update process by a factor of 2 or 3, possibly higher.
As an aside, the Windows Update datastore and the Windows AD datastore must be seriously some of the very last things to use the ESENT. Dunno if Exchange still uses it. Awful way of doing things though.
Windows Update is overly complicated and utterly unweildy. My perspective is that it was rather bolted together in the years when Microsoft decided to make the filesystem a database. They now have an inelegant mess that they cannot easily get rid of. I would hate to be someone who had to work on Windows Update code!
1. https://docs.microsoft.com/en-us/windows/deployment/update/w...
[1] - https://support.microsoft.com/en-us/help/3161647/windows-upd...
I believe someone mentions that feature updates like 1809/1803/etc are not actual patches based on current install, it is a complete OS reinstall, which explains the slow install.
See e.g. https://insider.windows.com/en-us/articles/were-listening-to...
However, the same comparison holds. I have an older backup PC in the basement with a hard drive, and it still takes just a few minutes to update in the background on Linux. Windows on that machine was simply unusable.
Single thread and cpu limited would explain it, since what I do have is almost unbeatable single-core performance from a high OC on an old i5.
Two things I don't understand: why updates are so slow; and why the updating can't be done out of band. Seems like it could be done either with hardlinks or using VSS, so that it's safe to do as a background process rather than effectively kicking the user off their own system for the entire duration. Both hardlinks and VSS have been around forever on NTFS.
While ReFS supports volume snapshots (but not hardlinks), its rollout as a replacement for NTFS appears stalled, only being recommended for specific use cases that aren't the general purpose use case (system disk).
2) Updates can be slow for a bunch of reasons. One of them is that the WU agent as shipped in e.g. Win7 SP1 had some nasty O(n^2) or worse operations that got fixed in [1] and later. One of the reasons the monthly rollups versus itemized bits were an enhancement is, if your install for each update is NUMUPDATES* O(start transaction + do install of update bits + swap into place + end transaction) , removing all but one of the start and end transactions is a nice speedup.
As far as using hardlinks and VSS to stage and swap updates into place...that is a thing that WU does already, and has done for quite some time.
ReFS also makes me sad because it has so much potential, but they rolled it out without being able to used for many use cases, so it's probably gonna stall and die.
[1] - https://support.microsoft.com/en-us/help/3161647/windows-upd...
I liked Windows 7 user experience. I had to boot up one in a VM the other day to debug a legacy issue. I realized how much I really did like it. I liked the control panel and all that. All that unified Metro(?) UI that has been developed since Win7 with mobile and touch in mind (that never happened?), with the new management tooling that seems to be only half way there combined with the near death of native Windows apps has effectively driven me to Ubuntu Desktop. Ubuntu userspace on Win10 is nice but then again, to me Win10 has been reduced to just something I run Firefox or Chrome when needed. Even Lightroom works well enough on Wine nowadays.
I get it - I am an old grumpy guy lamenting on change, probably off-topic too...but still, oh boy I wish they had decided to go some other direction! ;-)
It was the last version of Windows with a theme that wasn't butt-ugly.
An issue that affects me daily and would be easy for Microsoft to test: my Bose Bluetooth headphones' computer voice knows how to pronounce all my other devices' names (e.g. "Chris's iPhone"), but it must spell out my Windows machine name letter by letter. Even if I rename my Windows machine to something I know my headphones can pronounce (like "Chris's iPhone"), they spell it out. Perhaps this is a bug in my Bose headphones, but these are very common headphones so I'm surprised no one at Microsoft or Bose has addressed this problem. My hypothesis is that Windows machine names are UCS-2 encoded and the headphones interpret the "extra" bytes as word delimiters.
You didn’t accidentally install a “checked” build, did you?
https://docs.microsoft.com/en-us/windows-hardware/drivers/de...
It doesn't work this way, you can just sometimes abuse it to do what was not intended, but it's not meant to be done as in offering you options the official way.
It's infuriating to put the machine to sleep only to see in the morning (or days later...) that Windows woke it up at 3am.
Is it supposed to go back to sleep or is this honestly how someone at Microsoft wants it to work?
For years people sang about the many vulnerability of Windows at every turn. IOS spat out new features at a steady pace.
On the other hand, MS had to support the ever growing list of Windows versions and their incompatibilities - slowing down their rate of development.
The tech community was singing the praise of Lean and MVP.
Everyone loved to shit on IE for holding back the web. While praising Chrome for being chrome - having only one version to support.
And somewhere along the line, Google got the bright idea to remove the ability to disable Chrome's automatic update.
Add all these factors and more that I didn't mention and you'll see how MS came to the forced update decision.
Lest I forget, Nadella saw how he could fire Microsoft testers, reduce expenses and raise stock price with a forced update stroke. Irresistible.
If you don't see how an OS upgrade is different from an app upgrade within an OS, I honestly have no better way to explain.
(As for IE, don't tell a veteran what the Browser Wars were: IIRC, the rest of the browsers managed to move on without autoupgrades at first, so don't bring up that particular straw man: the issue wasn't autoupdate, it was "IE8 is the pinnacle of browsing, we're not going to update it for years, dev team dissolved.")
Oh, yes of course they got bullied! They got bullied into having a totally overengineered OS that is probably a nightmare to maintain, even without the many special switches that keeps faulty big player software from crashing. They got totally bullied into a naive design philosophy for their APIs and into churning out new framework after framework. And of course they got bullied into this by Apple and the media!!1 Google and Apple and all the rest bullied them with their despicable efficiency in rolling out features! /s
Sorry, but painting Microsoft as the poor victim here is a bit rich.
Windows is probably a nightmare to maintain and test for. I can really understand why the engineers wanted telemetry to track which API calls actually are still in use. They probably dream of having just to deal with a handful of subversions of Windows 10 and not with a zoo of rotting 7s, 8s, and XPs. Hence the forced updates.
Many other platforms are lighter and more agile. This entire container thing, e.g., would have been impossible to get started in the byzantine environment of Windows. Heck, I have a hard time imagining the elastic cloud getting started on an operating system that doesn't even allow your processes to continue after logout, and has a footprint in the 10s of gigabytes. Just for the basic needs.
And all of this is not caused by the inconsiderate craziness of evil outsiders, but by how Microsoft operated and designed in the 90s and early 2000s.
If Microsoft really wants to do "the right thing" they need to burn it down and start over. Something like ChromeOS with a Linux kernel and containerized emulation for win32/64 apps.
Remember how they rebooted Windows Mobile to Windows Phone? Didn't work as well. In fact, they rebooted Windows Phone OS three times (7, 7.5), (8, 8.1) and 10,[1]. Every single reboot cost them users.
[1](Microsoft's attempting another zombie resurrection with Core OS/Andromedia. Let's see if they release it and how it fares in the marketplace.)
I wouldn't even call ChromeOS a brand new thing. They turned an existing product - Chrome, into an OS.
See how Google's dragging their feet with Fuchsia? If their internal politicking (from the android team) is strong enough, Fuchsia will never see the light of day.
Point is, unless Windows' market share evaporates, it'll be insane for them to do the "right thing."
this is different than the side-by-side (WinSxS) support that allows parallel versions of the same dll to live on the system. that used to grow at huge rates when you had lots of system updates + lots of apps.
Since when? You can turn off Windows update service but it will turn itself back on. Even with Windows update turned off, they still have a way of quietly slipping stuff into your PC.
Use the Group Policy.
>Even with Windows update turned off, they still have a way of quietly slipping stuff into your PC.
No.
The settings I suggest don't disable it entirely - though I think that's an option, if not one I'd use myself - but it does let you choose when things get installed, after downloading them in the background.
I've been quite happy with this; I generally do want updates when they come out, but also want the option to potentially reliably defer them (or, more precisely, the potential reboot...) for a day or two.
(As for Windows versions, I use Windows 10 Professional.)
https://support.microsoft.com/en-us/help/4026834/windows-10-...
Most important: Windows doesn't allow me to set my USB modem connection as metered.
If I want to make a small change to notepad, I should not have to check out the whole Windows source code, but just notepad. Then you could have different development methodologies for different projects.
They should rip everything out piece by piece, and make it an addon. Then you'd have a minimal Windows core, a Windows shell, and the individual accessories. The shell alone would still be a huge project that you'd want to split up ideally.
The challenge with such a model is that you have to be really strict with interfaces between components. You have to define these interfaces, you have to quickly provide other groups with interfaces they need, and you have to provide backwards compatibility as long as any other component uses your interface. It's much more work, but it's better than the ad-hoc coupling you get if everything is one monolithic build.
Windows is no longer Microsofts core product, Microsofts cloud offering are its main revenue base. As a side effect Microsoft decides to open source the Windows code base. Microsoft is already the largest contributor of open source on Github.
Windows becomes a application compatibility layer in Linux and are also ported to Mac OS X. You can now run Windows apps on Linux and Mac OS X including games without the update issue.
https://www.windowscentral.com/understanding-windows-core-os...
> I would argue that Microsoft used to know how to ship software, but the world has changed... The companies that "know how to ship software" are the ones to watch. They have embraced the network, deeply understand the concept of "software as a service", and know how to deliver incredible value to their customers efficiently and quickly.
It seems a lot of people are using a Google-esque vocabulary where "beta" just means "new and fancy", and are really surprised when the beta release has bugs in it.
> Windows 10 Home users will receive updates from Windows Update automatically when it's available. Windows 10 Pro and Windows 10 Enterprise users will have the ability to postpone updates. The amount of time that Windows 10 Pro users can postpone updates is limited.
Basically: unless you pay a ton of money, we will use you as a guinea pig for testing.
[1] https://www.microsoft.com/en-us/windows/windows-10-specifica...
I've used every professional version of Windows as a dev since Windows Vista and it's always fascinating to go online and read of the horror stories that people have with Windows.
The only time I ever complain about the OS is in your typical enterprise environment where admins load all sorts of terrible gunk in the name of security that every so often has your machine slow as molasses.
But my personal machines all get updates regularly and so far so good.
Mac OS means buying unaffordable or underpowered hardware. And being ok with living within the constraints allowed by Apple (on the hardware side).
Linux is not a consumer option. Ubuntu, for all its flaws, was the first distro that could actually be considered consumer grade, and that’s why pretty much any mainstream PC maker offering a Linux option offered Ubuntu. But as you can tell by just glancing at the comments on the release for Ubuntu 18.10, even they have seemingly abandoned the desktop market in favor of servers and IOT, etc. And that’s before you get to Linux’s Applications problem.
Windows is a fairly solid OS with a few remaining warts which MS stubbornly refuses to address. One of the issues was the years they spent trying to convert it into a Mobile first OS. That was such a waste of resources.
The real competition to watch is ChromeOS.
In what way? Literally every OS has a browser and all ChromeOS is is an embedded instance of Chrome.
It's a shame we can't customise it as much as Android, despite it seemingly replacing Android on tablets.
You're not the target market. I haven't had to help my parents with their computers since they switched to Windows 10 home.
Even better, I hope to replace it altogether with a Linux desktop or, even better, a Mac.
Just to state the obvious, home versions of operating systems aren't designed to run POS systems for businesses. That's what professional and enteprise versions are for.