After another frustrating experience installing a laptop for a friend
(a clean, up-to-date laptop which managed to freeze itself within a day of purchase),
I thought to myself "why are these programs so lousy?"
It's not like the core OS is that bad. It's not wonderful, but it's pretty decent most of the time.
But so many of the surrounding programs that have to be installed are of very dubious quality.
So here's my big idea:
Apple/Microsoft should create an automated test facility for windows software(*) Create a website where an application developer can create an account, and upload his software to the website for automated testing
(*) the automated testing should run the the software on various platforms, with as much debugging and sanity-checking as possible turned on. i.e. use debugging versions of windows, with seriously anal checking of all system calls
(*) the tester should verify that the application follows best practices i.e. not installing junk in the wrong places, uninstalling cleanly, etc, etc.
(*) the tester should allow the developer to upload "test sequence files" from popular automated GUI testing tools. It should verify that at least 80% code coverage is achieved.
(*) the tester should fuzz files and GUI inputs and verify that the application fails cleanly
(*) the tester should randomly fail the various system calls that can fail and verify that the application handles it cleanly e.g. closing sockets unexpectedly, file system full, etc.
(*) Microsoft/Apple should mandate that in order for an OEM machine to achieve the "seal of approval", all software installed on that machine should have passed the tester.
In this going to cost them money? Of course. But if it leads to a better quality of software installed on the machine, it leads to a better user experience in general, and hence contributes to the success of that operating system.
Is this going to need some serious hardware and time to run? Of course, but if the website charges some small fees, and lets the developers choose how extensive the testing should be, it should easily possible to achieve < 24 hours turnaround time.
In these days of multi-core, multi-CPU machines, with vast amounts of memory, and nice handy virtual machines to run testing under, this kind of thing is not difficult to implement, it just requires a significant investment (which, compared to how much money Microsoft/Apple spends dealing with customer complaints is probably not that big a deal.)