Wednesday, August 20, 2008

Rewrite

I was going to comment on this post from some other guy's blog but holy hell is it hard to read. Lemme see if I can rewrite.

Take 2:
Thanks for all the feedback that we have been getting.
That much of it is positive is certainly appreciated. Reading through a bunch of M$FT SUCKS! comments gets old really fast.

Everyone has done a great job sharing their views on specifics, wishes, and requests. (Short aside: A Senior VP is reading your blog comments - that is awesome.)

I love getting these mails and reading the comments. It is fantastic. I just want to make sure folks know I can’t answer each one! I have a day job, and heck, it is wearing me down.

What we are going to do is look to the emails and comments as a way of suggesting posts we should write.

Lemme tell you what the Win7 team thinks about when planning a release. (Leave some comments to let us know what you think.)

Sometimes we do big releases, sometime we do smaller ones.

When we plan Win7, we argue a lot and then decide how many people will work on it, and for how long — and then, pretty much, you (as an end user, developer, or partner) decide if the release is major or minor.

End-users are generally the most straight-forward when deciding if a release is major or minor.
For an end-user a release is a big deal if they want to go out and buy an upgrade or buy a new PC. Well...actually, it has been years since anybody bought an OS for a feature. DOS 6.22 was the last one I bought for feature. DriveSpace was the feature, I think. Well, actually, Windows 95 looked like it had a bunch of cool new things too. And it could connect to the internet (better than Windows 3.1 could). That was a feature I spent money on. And every Windows since then has been able to connect to the internet. So that's not really a feature we can sell again. Dangit.

We keep trying to figure out reasons for people to upgrade to a new OS, but really, an OS these days is pretty much just something that you get with a computer.
Don't get me wrong, though - there are a bunch of things in Windows Vista that are cool that makes me 100% unlikely to every go back to XP - like the start menu search thing. It is the shiznit.

A tiny percentage (of our overall user base) wants to install our new OS on their existing PC - this is a fustercluck, as the new OS requires more memory, updated drivers for crappy old hardware that our crappy partners won't ever release, as they've already made their $10, and why should they hire a programmer to update a driver for a piece of hardware they sold years ago?

Developers look at a release through a different lens. Obviously for developers a release is a major one if there are new APIs and capabilities to take advantage of in their software—again straight-forward enough.
Actually, developers haven't cared about the APIs in new releases of Windows in ages - pretty much no software is 'Windows Vista or better' - no new API is so wonderous that you are going to limit the market for your application to 'just Vista users'. Seriously.

Pretty much all software today requires XP SP2...yeaaaars from now the minimum requirement will be Vista. Kind of like how developers are not getting comfortable with the idea of dropping Windows 2000 as a minimum requirement, which means that can start relying on the new APIs ....in Windows XP.

Partners are the cheap bastards who create PCs and other hardware, and are a major part of the make-it-as-cheaply-as-possible ecosystem that Windows is part of.

Partners like to think that we can put some nifty feaure in Windows that will make everybody run out and buy a new computer. Like Sideshow (that didn't work out too well - does anybody have one of those?). Or tablets (that worked out a little bit better. Browsing the web on the couch with a tablet is the shiznit. Again. But sadly the sales numbers don't reflect that.)

Partners hate having to update their drivers - they don't want to spend the money. That is why they love 'class drivers' - generic drivers for bits of hardware that are actually just commodity things at this point. Like cheap sound cards (Ever since AC97 came along). But generic hardware doesn't make much money.

Occasionally, partners want to 'differentiate' (make more money on a bit of hardware by trying to convince you that it is somehow better and thus worth more money) - so they create a piece of hardware (usually called SuperVoodoo Extreme BlingBling XXXPress) that you have to have, and to really differentiate it, they add shitloads of SuperVoodoo Extreme BlingBling XXXPress control panels and startup applications and system tray applications to your system. Because fuckit, you spent $299 and need the software equivalent of racing stripes and massive rear spoiler on your Acura.

IT professionals are overworked and underpaid - so conservative by nature and thus take a conservative view of change. Hate it, in fact.

Because the beancounters in this shit economy make them, they carefully evaluate if any new piece of software is going to be a good return on investment.

So for an IT professional a major release would be one that delivers significant business value.

This business value could be defined as a major investment in deployment and management of the software for example. So the fact that Windows Vista has 6000 group policy settings where Windows XP has only 1000 - well, that makes them pretty happy - They can configure the twelve thousand Vista computers in their company exactly the way they want them, from one place.
(I totally made up those numbers, by the way - I can't be bothered to look them up. But I think they are close to the real ones. Probably.)

Journalists and techies think that a “re-architecture” means "major release" - because there is lots of new stuff in there now, and all the old cruft has been flushed. (But “re-architecture” sucks for partners and IT pros.)

Folks usually think that re-architecting leads to better performance, breaking with the past leads to using less memory, etc - I like to call it 'The Cargo Cult of Clean Slate'

The grass is always greener on the other side - we have long term plans for Windows, and harsh, radical changes can sink you. (and nobody really does it...Ask Adobe what they think about Apple's harsh changes.)

It is always tricky to debate those points because we are comparing a known state to a state where we fix all the things we know to fix, but we don’t yet know what we might introduce, break, or otherwise not fix. As Dick Cheney (or was it Rumsfeld once said): ...Something about known unknowns. We have known unknowns now, and we prefer them to unknown unknowns. Or something.

But we still do a lot of spring cleaning in Windows. Spend a lot of time on it.

Anyway...
The key is always a balance. We can have big changes for all customers if we prepare all the necessary folks (partners and application developers) to work through the change.
We can have small changes have a big impact if they are the right changes at the right time, and those will get recorded over time as a major release.

We dedicated our full engineering team and a significant schedule to building the Windows 7 Client OS. That makes it a major undertaking by any definition. We intend for Windows 7 to be an awesome release. No, seriously, we think it will be pretty cool. Things are going much much better than they were at this point of Windows Vista.

Monday, July 14, 2008

20 Features Windows 7 Should Include

(Turns out I forgot to publish this last week...)

According to Australian computer expert Vito Cassisi

My opinion:

20. Modularised OS The great thing about being modular is that the OS can be modified easily. Think Linux here - in Linux everything is modular and replaceable. For example, you can replace the whole GUI component without affecting anything else. Windows Vista is modular and (theoretically) any part is replaceable.

With the abundance of third party applications written for Windows, this would spur a whole new variety of customisation and open-source implementation.
...and Microsoft could spend an enormous amount of development time to make a feature for people who (for some unexplained reason) want to replace their ...what? explorer.exe? I don't think this is what the average customer wants us to be working on.
(Back in the day, you could make Windows load something other than explorer.exe as the shell by modifying win.ini (Shell=explorer.exe, I think...) I don't know if that still works.)

19. XP Virtual Machine It seems that the biggest issue with Vista was compatibility with older software/drivers. A solution may be to include an XP virtual machine which ensures compatibility with said software. Apple did a similar thing when they re-wrote their OS a few years back.
Sigh.

API behavior between XP and Vista is not that much different; a virtual machine is overkill.

I don't quite get the ' / drivers' part of that comment...so, you want to put a scanner driver in a separate VM...away from all your new applications? (not a good idea)
OK, so should we write some kind of cross-VM communicator thingy? That's a lot of work, and a lot of project risk.

Wrt 'but Mac OS X did this years ago' - Go reread the reviews for 10.0. It is not a good idea.

Windows Vista does a good job of 'shimming' old apps to work with Vista. That's the best approach.

18. New UAC In theory UAC was a great idea. It protected people from themselves, but it was too intrusive. An alternate idea is to teach the user the importance of limited accounts and how they prevent the accessibility of nasties such as viruses. UAC should be a single dialogue with ‘Continue’ and ‘Cancel’ and an explanation of why the user was interrupted.

And that is what it is*. AUC is getting better, as more apps are written with AUC in mind.

*We could have done much much better on explaining it, though.

17. Gaming Mode Most Windows users like to dabble in a bit of gaming when on their PC. But the constant demand for computing power by the latest titles (read: Crysis) can leave the majority in the dark. Perhaps Microsoft can offer a mode similar to that of the current ‘Safe Mode’ which only initiates the required services for gaming. This would minimise overhead and increase performance.
WTF? What would you turn off in this 'gaming mode'? The average user does not want to deal with 'mode switches'; Windows is supposed to be lean-and-mean enough to get out of the way when the user plays a game. (It is not like some frivolous service in Windows is sucking up 30% of your CPU at all times...Before you start: Windows Search is supposed to back off when you are using your computer.)

16. Customised Install The avid performance tweakers out there may have heard of the likes of NLite and VLite for XP and Vista respectively. These pieces of software allow you to remove unwanted components from the OS before you install it. This increases available HDD space, and also improves performance depending on the services cut out. Offering the same amount of control when installing Windows 7 would settle the ‘Windows is bloatware’ activists out there.
The vast majority of users get their copy of Windows pre-installed with their computer. They don't install it themselves.

How much does the disk space cost that Vista takes up?
Somebody did a back-of-a-cocktail napkin calculation; Vista takes up less than $2s worth of hard disk space. It is literally not worth your time to go delete chunks of it. (That $2 is for spinny magnetic disks; SSDs are obviously different.)

I find it funny that there are so many tweaking utilities for slimming down a Vista install - they are using the componentization system we built; as far as I can tell, it is not like they are inventing anything new. (Well...they put a good UI on our componentization story.)

15. Productive GUI Microsoft bit the bullet with Vista and changed the GUI to be attractive. This is fine by all means, but the productivity of this new GUI wasn’t exactly enhanced all that much. Small things such as multiple desktops and simpler open/save dialogues can make all the difference. Perhaps even let the user modify the GUI to their liking, i.e. toolbar sizes etc.

We do this already - we do a lot of usability studies, to see what we should change. But yes, we should make system dialogs (like file open, etc) easy and fast. I agree 100%.

14. All for One and One for All Vista came out in so many versions that even Chuck Norris was bewildered. There should only be three, Home, Business/Pro, and Server. This would lessen the current Windows ambiguity.
I can't not disagree more.

13. WinFS Whatever happened to the infamous NTFS replacement? Windows 7 would really benefit from an improved file system, and such an improvement is bound to attract businesses that shunned Vista for its lack of innovation and improvement.
Businesses want a version of Windows that never crashes, never needs updating, and that they can manage from the other side of the world. 'lack of innovation' is not something I've heard before. And we talk to businesses a lot.

What do you think businesses want from 'an improved file system'?

The relational database structure should enhance overall system performance.
This statement is somewhat similar to: Taking a shower will make me more attractive to Angelina Jolie. The more immediately pressing concern is that she doesn't know that I fucking exist.

In my opinion, Windows Desktop Search gets you most of what WinFS would have gotten you - the average home user doesn't want to run SQL queries against their filesystem; WDS allows you to do text and/or metadata search pretty quickly.

12. Home User Licensing Let’s say you have 3 PCs in your house, two desktops and a laptop. You want to upgrade to Windows 7, but have to pay three times for three separate licences. In a world where P2P and torrents are commonly used, how many users would slip into the world of cracks and keygens? The solution (to an extent) would be to offer a home licence. A small fee to be able to use the OS up to, for example, five times in the one household would surely benefit both Microsoft and the average home user.
I can't not disagree more.

11. Driver Availability Arguably the Achilles heel of Vista was the slow uptake of drivers by device manufacturers. Although this is hard for Microsoft to dictate, it would be in their best interest to promote driver production during the OS development stage. Even if the drivers are beta, it sure beats being left with no hardware functionality.
We're working on this. We're not changing a huge number of driver subsystems ever again; Vista taught us that lesson.

10. Standards Compliant Browser This isn’t much of an OS thing, but it is bundled so we have included it. Internet Explorer 8 would win the hearts of many web developers if it was created to web standards. There’s nothing more frustrating than coding a website which works fine in Firefox and Opera only to have IE spit the dummy.

Er...IE8. Acid2. Look it up.
(Yes, it isn't perfect, but it is 10000x better.)

9. Program Caching Currently, Vista caches commonly used software into RAM so that it launches faster. The main problem with this approach is that it confuses users into thinking Vista is using several hundred MB of RAM just for itself. A simple toolbar notification stating ‘Vista is caching your programs to improve speed. Click here for more information’, would end all the confusion.
This is solving a problem in exactly the wrong way. The average user doesn't care. This would be similar to a message popping up on your car dashboard saying: Your fuel management computer has determined that it needs to adjust the fuel to air ratio that is being fed into your engine.

When the average user would say 'why the fuck should I care? isn't that what you are supposed to do anyway?' - that's a hint that they don't care.

One of the UX guidelines that we have is to never use balloon messages for obvious messages (don't tell me about things that are just supposed to happen anyway) - Are there any spots in Windows where we annoy the user with obvious messages?

8. Microsoft Toolbox This is an idea we came up with which we believe would benefit many users with compatibility issues. The feature would list current drivers and patches for all installed hardware, games, and software. By having this all in the one place (possibly within Windows Update) users can keep their system up-to-date without seeking drivers and patches manually.
Search for 'Solution' in the Vista start menu; the Problems and Solutions thingy will look at the applications that have crashed on your computer, and any devices that don't have drivers, and show links to manufactures websites, where you can download updates.

Ideally, this should all just happen via Windows Update, but other software and hardware companies don't trust Microsoft (or any other software company) that much.

7. OS Restoration via imaging System restore is a great companion when things go wrong. But sometimes the damage is too severe. By integrating a user friendly imaging solution, the user would be able to install everything they want, and then simply create an image of the setup. This image would be saved on another HDD or partition ready to restore in the case of a system failure.
Interesting idea. 'On another HDD' is a bit silly; backing up to something that'll burn down along with the rest of your house...well, that's isn't backup, in my opinion. (Time Machine, I'm looking at you.)

6. Barebones Kernel This idea has been thrown around by Microsoft, specifically ‘MinWin’. Allowing the user to choose between this and the default kernel could potentially allow older systems (i.e. XP based) to run the new OS with decent performance levels.
Not even Linux does this anymore. Any reasonable modern kernel can run any any reasonablely modern bit of hardware. (And kernels adjust to machines with low ram/low power CPUs/etc)
Also, this is like asking the user to pick a brand of spark plug when buying a car. They don't fucking care.

5. 64bit only The main difference between 32bit and 64bit is the amount of accessible memory or RAM. Plans to create a 32bit Windows 7 would be counterproductive, by then GPUs would use at least 1GB of VRAM, and the average system will most likely have upwards of 4GB of RAM. Considering the 4GB memory addressing limit of 32bit, you can see that confused customers won’t be happy.
We're trying as hard as we can to get to a 64-bit only world. The rest of the software industry needs to catch up. (Where's my 64-bit version of Flash? Acrobat? Etc.)

4. Better out-of-box burning capabilities CD/DVD burning is a simple everyday task. Unfortunately, Vista cannot burn discs very well, and there is a severe lack of options. A decent burning service wouldn’t go astray in Windows 7.
Yeah, this would be good to have.

3. Diagnostic Tools It happens all the time, you build your own PC and the OS install constantly crashes. You blame the OS, but really, something else is at fault (such as the RAM). If diagnostic tools similar to Memtest were included, issues like this could be detected without the need to find third party software.
Good idea.

2. Faster Boot and Shutdown This seems to be something that constantly plagues Windows. A faster boot time would be a great first impression to many critics, and it’ll save valuable time, especially when restarting for updates.
We did a boatload of work to make Vista boot fast. Sadly, computer companies add a bunch of crapware that slows down bootup.

1. Simplify and manage startup items Many users install software which starts up with Windows. All of this software opening at once causes lag and lack of usability for a considerable amount of time. A simple startup interface (not as daunting as the current MS Configuration Utility) would help users disable what they don’t need running. Another feature would be to schedule programs to start after a certain amount of time. This would prevent the computer struggling to open several programs in one hit.
A lot of services and big chunks of Windows Shell already do a delayed load. As far as I could determine (back in the Windows XP days), there is actually no way to determine when all the relevant bits of Windows have finished loading. As I recall, after 10 minutes, everything is guaranteed to be up and running. (So, the point is that (if you have something that is in the startup path) you should check, and not assume, that a part of the OS that you need is loaded.)

As always, I'd love to get your feedback; comment away.

Wednesday, July 9, 2008

Now *that's* debugging

Occasionally, you only fix one bug a day. But, you have a good story to tell.

Several notes:
"One of the goals of the operating system's designers is to not allow programs running in user space to ever crash the entire machine."
Yep, yep.

Any misbehaving application can turn into the equivalent of a Fork bomb, exhausting some OS resource. (Fork bombs gobble up the number of processes that are available on a machine, but a bad application can gobble up pretty much anything - CPU time, memory, overload the disk with seek requests, etc.)

The more blocks and checks they put between us and the hardware, the slower our programs are going to run.
Yes, in theory. In practice, you are not going to notice if the OS takes a couple of clock cycles to check that your application is not doing something crazy. That's kinda the point of an OS - to abstract you away from the hardware, and to make your application play well with others.

This is like complaining that the side mirrors on your car are impacting the top speed. (True, if you are trying to set a land speed record. Not true if you are commuting.)

Imagine if the Apple said to programmers: "Ok, in order to not let you dominate the hardware, we will only let you use 50% of the CPU at any one time." Now imagine you're a user, running World of Warcraft on your brand-new $4,000 ultra-lux machine, and you're only getting half the framerate you
should be, and would be under, say, Windows.
The 50% figure is a bit silly. But yes, making a 'bulletproof' OS for consumers with a lot of protections against resource exhaustion is, in my opinion, generally not worth the effort - your average user does not run into this fork bomb issue all that much, and it is generally recoverable.

Avie Tevanian had been working on Mach as a PhD student at Carnegie Mellon, and Steve Jobs recognized he was a star and hired him straight away. (Microsoft countered by hiring Avie's old advisor to work on NT, which is kind of like Microsoft hiring my mom because I'm a good programmer.)
Ad hominem, for no good reason.

Knowing it was an immutable data, the CoreData object didn't make a copy of my data, it just retained the exact same NSData object. The one that had an open memory-map of the image file!
Excuse me for smirking, but this occasional does-the-OS-have-a-pointer-to-that-bit-of-memory head scratching is something you have to do in the Win32 world as well. The horrible, much maligned Win32 world. The more things change...

Sunday, June 29, 2008

New York Times gets it wrong

Windows could use rush of fresh air

Beginning as a thin veneer for older software code, it has become an obese monolith built on an ancient frame. Adding features, plugging security holes, fixing bugs, fixing the fixes that never worked properly, all while maintaining compatibility with older software and hardware — is there anything Windows doesn’t try to do?
Disaster! Run for the hills! Microsoft is trying to do the bare minimum you have to do with a commercial operating system!

Painfully visible are the inherent design deficiencies of a foundation that was never intended to support such weight. Windows seems to move an inch for every time that Mac OS X or Linux laps it.
The oldest 'base' for Windows (if you could distill it down that way) is the NT source code. That was designed from day one to be as future proof as you can make an OS. (Trying to future proof software over more than a decade is like trying to predict the weather at 2pm, on the 4th of July 2045. Windows is pretty modern, just like everything else out there. I can't really think of any ancient technology in Windows that is beyond salvage; everything important that needs to be overhauled can be overhauled, and has been. (Hit that Comment button if you disagree. I'm not saying everything in Windows is perfect. It isn't. I just don't think we've painted ourselves into a corner anywhere with the OS design.)

The best solution to the multiple woes of Windows is starting over. Completely. Now.
Ah yes - the wonderful lets-start-over argument. Every developer gets to this idea at some point. Good developers think of ways that they can take what they have, and radically improve it.

Vista is the equivalent, at a minimum, of Windows version 12 — preceded by 1.0, 2.0, 3.0, 3.1, NT, 95, NT 4.0, 98, 2000, ME, XP. After six years of development, the longest interval between versions in the previous 22-year history of Windows, and long enough to permit Apple to bring out three new versions of Mac OS X, Vista was introduced to consumers in January 2007.

That's correct, I guess.
Although XPSP2 was, as a project, the size of a new OS.
And we shipped Windows Server 2003 in that gap. And a lot of 64 bit versions of Windows.

When I.T. professionals and consumers got a look at Vista, they all had this same question for Microsoft: That’s it?
I know what they were trying to say. They're trying to say: Awww yeah, that's it.

The internal code name for the next version is “Windows 7.” The “7” refers to nothing in particular, a company spokeswoman says.
She doesn't use winver. Just like most consumers.

But sticking with that same core architecture is the problem, not the solution. In April, Michael A. Silver and Neil MacDonald, analysts at Gartner, the research firm, presented a talk titled “Windows Is Collapsing.” Their argument isn’t that Windows will cease to function but that the accumulated complexity, as Microsoft tries to support 20 years of legacies, prevents timely delivery of advances. “The situation is untenable,” their joint presentation says. “Windows must change radically.”
Eh, OK. I think I blogged on that before.

Some software engineers within Microsoft seem to be in full agreement, talking in public of work that began in 2003 to design a new operating system from scratch. They believe that problems like security vulnerabilities and system crashes can be fixed only by abandoning system design orthodoxy, formed in the 1960s and ’70s, that was built into Windows.
Unfortunately, this willingness to begin with an entirely new foundation is not located within the Windows group but in Microsoft’s research arm, where scientists and their heretical thoughts are safely isolated. Last April, Microsoft publicly unveiled the five-year-old research project, called “Singularity.” It is nothing more than a neat academic exercise, not a glimpse of Windows 7.

So...Microsoft Research is looking into brand new unproven ways to build operating systems. And we're not using those unproven methods and technologies *today* when we sell operating systems to millions of paying customers? Yes, we suck indeed.

[Mac OS X is] based on a modern microkernel design, which runs a very small set of essential services that make the system less vulnerable to crashes.
Yes, that is a somewhat true point, but distilled down to nothingness by the NY Times editor. (Are microkernel-based designs more robust? The answer is ...er, kind of, based on your definition of modern, microkernel, essential, services, system, vulnerable and crashes. And is.)

In some crucial ways, however, Microsoft would enjoy advantages in developing its own “Windows OS X,” as we might call it, that Apple did not: the power of today’s quad-core machines and sophisticated virtualization software would allow older software applications and hardware peripherals to be used indefinitely with little or no performance penalty, making a clean start far easier for customers to accept.

Sigh. No. Memory is the big problem here - virtualizing Windows Vista in a little virtual box inside of Windows 7 (or 8 or 9 or 10 or whatever) is going to take too much memory.

Quad-core is not going to help you; the bottleneck here is not the CPU; fitting two operating systems into memory is. A simple point like this should be easy enough to explain in the NY Times.

A MONOLITHIC operating system like Windows perpetuates an obsolete design. We don’t need to load up our machines with bloated layers we won’t use. We need what Mr. Silver and Mr. MacDonald speak of as a “just enough” operating system. Additional functionality, appropriate to a given task, can be loaded as needed.

If only there was a way for a bit of software to load bits and pieces of the operating system, as needed...Some API to load a dynamic link library from the disk, into memory, and then call a well-defined API in said DLL. Maybe we can call it...LoadLibrary()?

Wednesday, June 4, 2008

Download this, install it

Windows Search 4.0

The search engine in Windows Vista is not as good as it could be. This one is much better. Download it, install it. You will not be sorry.

Sunday, June 1, 2008

Here's an idea...

A friend of mine, yesterday:

"If software crashes and loses my data more than 10 times, I should get the next version for free."