Yes, this is another Wii rant. There are plenty of other articles talking about the poor recent game offerings, the hardware limitations, and the primitive online play. I’m not here to talk about those. Instead, I’m going to talk about the Wii’s software stack, and how it compares to other consoles.
The Wii’s software architecture sucks.
If you look at lists of software updates for the PS3 or the XBox 360, you’ll find things such as PS3 update 2.40, which made XMB available in-game, or XBox 360 update 2.0.7357.0, which added the New XBox Experience, among many smaller updates are stability fixes, new peripheral support, and new features like in-game screenshots. A large amount of the features affect or improve the in-game experience.
Meanwhile, the Wii got all of:
- Things, such as copying saves to SD, which should have been there from the start
- Support for new features for new games, with zero improvements for any games already released (USB keyboards, WiiSpeak, etc).
- Updates to built-in channels (WiiShop, etc)
- Wii menu or messageboard tweaks, like moving channels or, get this, a clock.
- Security updates, or their failed attempts at stopping homebrew.
This isn’t a coincidence. As it turns out, Nintendo chose not to have any operating system or common code at all running on the Broadway CPU. When you run a game, everything that shows up on your screen, ever, is being loaded from that spinning polycarbonate disc. And there are no mechanisms for anything else to run on that CPU: no update infrastructure, no Home Menu updates, nothing. If they ever want to have a “hypervisor” run above games, they’ll need to get a new CPU with full-blown virtualization capability (or an emulator), because games assume they have direct access to the CPU and most of the hardware.
If you’ve been following the Wii scene, you might be thinking, “what about IOS?” Indeed, Nintendo’s security and I/O Operating System runs alongside games (on a separate CPU built in to the Hollywood chipset) and it is updated as part of system updates. It includes some important bits and pieces like some peripheral drivers. However, as it turns out, Nintendo has decided that every new feature will be developed as a separate fork. Your Wii contains many IOS versions, and the older have never been updated except for security reasons (to fix our exploits). Not that they’ve added many new features, but if you look closely, new IOS features do not operate when you’re playing older games. This includes any updates to the WiiConnect24 downloads code, and even some minor things like the “slot LED blinks when you eject a disc” feature – try it when you’re playing Zelda and you’ll see that it doesn’t work, because it’s using the very old IOS9.
There are 23 IOS versions installed with current updates (this is also wasting the scarce 512MB internal memory!). Any new feature that they want to use in older games would have to be retroactively and individually added to each version, and it could create compatibility concerns because the interfaces with IOS functions aren’t all that stable either. Just doing these updates would cost them an immense amount of effort – it took them well over half a year to fix the fakesigning exploit and ship the IOS updates for all 23 versions, and that’s a minor update that can’t possibly affect games. Every time they’ve added a new feature (for example, the recent Wii Speak support, or USB keyboard support, or USB mouse support) they’ve just made a new fork of IOS for it. And IOS is limited to what it already handles – the ARM CPU that it runs on has no access to the graphics capabilities of the Wii (nor is it fast enough anyway – it has no floating point capability and it is a lot slower than the Broadway), so they can’t add any user-interface features to it.
Even worse – some things that should have been implemented in IOS aren’t. Like the Bluetooth stack and the Wii Remote code. Forget about any Bluetooth device support in older games – they couldn’t pull off a VoIP feature, ever. The SD card filesystem code is implemented in the games, which means that they can’t possibly add any code that uses SD card files, because two filesystem drivers can’t be used on the same device at the same time. Some things, such as saving games to SD for titles that don’t otherwise use the SD slot, are possible, but the changes needed to accomplish them would be so hacky and intrusive that I doubt they’re ever going to happen. One of the few things they can update with relative ease is networking (because the TCP/IP stack runs in IOS), but even then they still need to touch all IOS variants to fix it retroactively in older games. We’ve seen some changes but I doubt we’ll see many more.
As a specific example, let’s look at the much-discussed future ability to load Virtual Console and WiiWare titles from an SD card (seriously, what the hell were they thinking with 512MB of internal storage and no sane infrastructure to ever expand it externally?) There are three possible solutions to get this to work:
- Add FAT filesystem code to IOS retroactively, disabling any SD access for titles that launch from SD
- Add FAT filesystem code to IOS retroactively and push title updates for everything that uses SD, to remove the in-title FAT code and replace it with a new interface to IOS
- Just fake it and transparently copy titles to the Wii system memory when you want to launch them, causing more Flash wear and tear and longer launching times
Chances are they’re going to go for number 3. And the only reason 1. and 2. exist is because downloadable content access is implemented through a unified “application security” subsystem, which forced them to define a sort-of-standard interface for it. They wouldn’t have done it otherwise.
While other consoles get firmware updates, new peripheral support, bugfixes, and even major updates like the XBox New Experience, pretty much everything on the Wii will remain just as it is now. The best Nintendo can do is update the Wii Menu, but once you get into a game, there’s nothing it can do. Forget about an improved Home Menu. Forget about any changes to online gaming beyond minor server-side tweaks. A unified friends system to avoid having to enter friend codes for every game? Not going to happen. Bad game bugs? Tough luck, there’s no patching system (remember the Zelda issue?) Some future proper online support with social features, like the other consoles have? Will never work with older games. Worse, Nintendo are really proud of themselves, so they won’t admit that they screwed up their software by releasing such big new features and having them only work for newer games. Instead, they’ll wait until Wii2 (or worse, Wii3), lag behind their competitors, and the features still won’t work in backwards-compatibility mode.
All in all, the Wii’s software stack is designed with little to no future proofing. There are basically zero provisions for any future updates; even obvious things like new storage devices or game patches. What’s worse is that this will affect the compatibility mode of any future Wii successor. Just like DS titles won’t get WPA support on the DSi, effectively making the DSi’s WPA mode useless if you ever want to use DS titles on-line. The DS WiFi drivers and configuration stack are built in to every game.
Remember, when Nintendo fails to deliver new Wii features, it won’t be because they aren’t trying. It’ll be because they’ve killed their chances from the start.