Before figuring out how to tackle this project, I needed to know whether it would even be possible. According to a 2021 Reddit comment:
There is a zero percent chance of this ever happening.
Feeling encouraged, I started with the basics: what hardware is in the Wii, and how does it compare to the hardware used in real Macs from the era.
I LOL'd
glenstein 5 hours ago [-]
I almost think such projects are worth it just to immortalize comments like these. There's a whole psychology of wrongness that centers on declaring that not-quite-impossible things will definitely never happen, because it feels like principled skepticism.
inlined 4 hours ago [-]
That used to be my thing: wherever our ops manager declared something was impossible, I’d put my mind to proving her wrong. Even though we both knew she might declare something impossible prematurely to motivate me.
My favorite was “it’s impossible to know which DB is failing from a stack trace”. I created STAIN (stack traces and instance names): a ruby library that would wrap an object in a viral proxy (all returns from all methods are themselves proxies) that would intercept all exceptions and annotate the call stack with the “stain”ed tag.
Groxx 3 hours ago [-]
I've seen more than one half-joke-half-serious chunk of code that would "encode" arbitrary info into stack traces simply by recursively calling `fn_a`, then `fn_s`, `fn_d`, and `fn_f` before continuing with the actual intended call, giving you a stack trace with (effectively) "asdf" in it.
They've also been useful more than once, e.g. you can do that to know what iteration of a loop failed. There are of course other ways to do this, but it's hard to beat "stupid, simple, and works everywhere" when normal options (e.g. logs) stop working.
Similarly, one of the great things about Python (less so JS with the ecosystem's habit of shipping minified bundles) is that you can just edit source files in your site_packages once you know where they are. I've done things like add print statements around obscure Django errors as a poor imitation of instrumentation. Gets the job done!
glenstein 3 hours ago [-]
Well you're doing gods work as far as I'm concerned. Conflating difficulty in practice with impossibility in principle is, to my mind, a source of so much unnecessary cognitive error.
xattt 3 hours ago [-]
The declaration of an impossibility of a given task or goal is a reflection of the perceived barrier by the individual, rather than the task itself.
itsamario 2 hours ago [-]
Wise men speak when needed; fools because they want
alexchantavy 1 hours ago [-]
The solution to every software problem is another layer of indirection :-)
prpl 3 hours ago [-]
Adversarial software development is also when I do my best work
whycome 13 minutes ago [-]
Adversarial personal development is definitely a thing too.
dj68k 56 minutes ago [-]
I'm remindded of my favorite immortalized comment, "No wireless. Less space than a Nomad. Lame." Rob Malda of Slashdot, 2001, dunking on the iPod when it debuted.
gxs 40 minutes ago [-]
So many. The Dropbox comment on HN
Funny enough about the Dropbox comment, it caught so much flak that it’s gone full circle and I’ve often found people defending it saying what the guy said made sense at the time etc
I guess Reddit is just less empathetic than HN
Groxx 3 hours ago [-]
They're kinda like high-effort shitposts. Which are my absolute favorite kind. The worse the effort/reward payoff, and the more it makes you ask "WHY??!!?", the better.
mlaretallack 3 hours ago [-]
100% agree, I find that sometimes I hit a dead end, but the things I build or learn on the way are usable at a later date.
pnptransistor 1 hours ago [-]
Now tell me your opinion on P==NP being confirmed within 5 years.
Waterluvian 43 minutes ago [-]
P == NP && P !== NP
mikepurvis 3 hours ago [-]
Love that it's actually linked as well; too bad that user isn't still active.
gxs 41 minutes ago [-]
Yes, I’ve found at work that the best way to get me off my ass and work furiously is to tell me something isn’t possible
blkhp19 5 hours ago [-]
I'd be lying if I said it wasn't a very tiny part of my motivation :)
bombcar 4 hours ago [-]
It's a variation of "because it's there" when asked why would you climb some giant mountain.
Impressive work! Now run Dolphin on it. ;)
bluedino 3 hours ago [-]
Wasn't the old Linux joke, don't ask "how do I do X with Linux" (because you'd get ridiculed for not reading the docs) but instead, just state "X isn't possible with Linux" and then someone would show you how it's done?
gbalduzzi 2 hours ago [-]
Or eventually you could answer wrongly to a question without answers, triggering plenty of correct ones
chrisweekly 2 hours ago [-]
yeah, it's an interesting socio-psychological phenomenon
wpm 3 hours ago [-]
I have a project on my desk that started as a response to a line in the Adafruit docs for their RP2040 based MacroPad
It is not possible to add BLE or WiFi at this time to the MacroPad.
Oh yeah, really? There is a port hanging off the side that can be reconfigured for UART, are you sure Adafruit, what if I add an ESP32?
ex-aws-dude 50 minutes ago [-]
HN is not as bad but I think a lot of internet commenters do this because it gives them a little hit of superiority
Plus the internet basically equates cynicism with intelligence
There is somehow no concept of "ignorant cynicism"
bsimpson 3 hours ago [-]
> Readers with a keen eye might notice some issues:
> - Everything is magenta.
was fun too
addybojangles 3 hours ago [-]
So much has happened in the tech world because someone wrote at one point, "You can't do that"
My favorite part of our online world.
talkfold 42 minutes ago [-]
The "zero percent" guy definitely opened a browser tab to check after the post went live.
MomsAVoxell 3 hours ago [-]
The missile knows at all times where it is, by knowing at all times where it isn’t.
krylon 3 hours ago [-]
I had the same reaction.
nancyminusone 5 hours ago [-]
Gotta love that particular Redditors follow up comment:
>Go ahead and downvote me. I am correct on every single thing I said
arcfour 3 hours ago [-]
The best part is the comment ranting about how the Wii's CPU is so fundamentally different, and then:
> The Wii uses a PowerPC 750CL processor - an evolution of the PowerPC 750CXe that was used in G3 iBooks and some G3 iMacs.
Hilarious.
dpoloncsak 5 hours ago [-]
Tempted to necro a 5 year old reddit post just to tell that guy he was wrong, honestly
zamadatix 2 hours ago [-]
This is why Reddit defaults to archiving posts (preventing new comments or votes) after 6 months.
Jeremy1026 4 hours ago [-]
User hasn't posted in 4 years. Sadly, they'd probably never see it.
ErneX 4 hours ago [-]
I wanted to, but no replies are allowed now :)
LimeLimestone 1 hours ago [-]
I tried messaging them and it says I'm not allowed to message them. Weird, never had that happen to me
noman-land 4 hours ago [-]
Make a new thread calling them out personally.
oceansky 5 hours ago [-]
Comments are blocked there
dfxm12 4 hours ago [-]
The comment score is 1. It doesn't even have a controversial flag. The gamification of social media is a mistake.
rayiner 5 hours ago [-]
Not only is this an insanely cool project, the writeup is great. I was hooked the whole way through. I particularly love this part:
> At this point, the system was trying to find a framebuffer driver so that the Mac OS X GUI could be shown. As indicated in the logs, WindowServer was not happy - to fix this, I’d need to write my own framebuffer driver.
I'm surprised by how well abstracted MacOS is (was). The I/O Kit abstraction layers seemed to actually do what they said. A little kudos to the NeXT developers for that.
blkhp19 4 hours ago [-]
I felt similarly. The learning curve was a tad steep, especially since I had never written a driver before, but once I figured out how to structure things and saw the system come alive, I grew to appreciate the approach IOKit takes.
With that said, I haven't developed drivers for any other platforms, so I really can't say if the abstraction is good compared to what's used by modern systems.
spijdar 5 hours ago [-]
IOKit was actually built from the ground up for OS X! NeXT had a different driver model called DriverKit. I've never coded against either, but my understanding was they're pretty different beasts. (I could be wrong)
That said, indeed, the abstraction layer here is delightful! I know that some NetBSD devs managed to get PPC Darwin running under a Mach/IOKit compatibility layer back in the day, up to running Xquartz on NetBSD! With NetBSD translating IOKit calls. :-)
twoodfin 3 hours ago [-]
There’s a great video of a NeXT-era Steve Jobs keynote floating around—I think the one where he announces the x86 port as NeXT was transitioning to a software-only company—where he specifically calls out DriverKit and how great it is.
Steve was not a developer but he made it his business to care about what they cared about.
steve1977 4 hours ago [-]
Funnily enough, there is a (different) DriverKit in macOS again now ;)
erichocean 5 hours ago [-]
As I remember it, they were basically the same—but IOKit is C++ (with restrictions) because 3rd party developers didn't want to learn Objective-C.
But that's a hazy, 20 year old memory.
spijdar 1 hours ago [-]
Yes, you're right! I'm just dolt who's never checked what a .kext on OS X actually is.
I had been under the impression that DriverKit drivers were quite a different beast, but they're really not. Here's the layout of a NS ".config" bundle:
The driver itself is a Mach-O MH_OBJECT image, flagged with MH_NOUNDEFS. (except for the _reloc images, which are MH_PRELOAD. No clue how these two files relate/interact!)
OS X added a dedicated image type (MH_KEXT_BUNDLE) and they cleaned up a bit, standardized on plists instead of the "INI-esque" .table files, but yeah, basically the same.
"At some stage in the future we may be able to move IOKit over to a good programming language"
xenadu02 1 hours ago [-]
IOKit was almost done in Java; C++ was the engineering plan to stop that from happening.
Remember: there was a short window of time where everyone thought Java was the future and Java support was featured heavily in some of the early OS X announcements.
Also DriverKit's Objective-C model was not the same as userspace. As I recall the compiler resolved all message sends at compile time. It was much less dynamic.
geerlingguy 5 hours ago [-]
And there are enough parallels to Linux's stack, I'm thinking about looking through the Linux on Wii project more and comparing how it handles fb issues in comparison. I loved reading this whole post, crazy how many OSes have now been run on the humble Wii!
steve1977 4 hours ago [-]
I guess having targeted multiple architectures and in the case of OPENSTEP also operating systems early on certainly helped.
phendrenad2 2 hours ago [-]
> I'm surprised by how well abstracted MacOS is (was).
Usually the difference between something being well-abstracted vs poorly-abstracted is how well it's explained.
frakt0x90 5 hours ago [-]
If all the AI stories on this site were replaced with amazing stuff like this, the world would be a better place.
jjice 4 hours ago [-]
I probably have rose colored glasses, but this is what I associate with Hacker News when I first started coming to this site. Truly absurd projects for no reason other than the love of the game and detailed write ups.
I'm not an LLM post hater, but it definitely has been a bit draining lately. This is exactly what I love to see here.
mech422 27 minutes ago [-]
yeah - I wish the 'Hacker' part of 'HackerNews' got more attention. Last few years it often feels more like "VC-Buzzword-of-the-day-News" - AI is just the most recent cycle.
kstrauser 5 hours ago [-]
Get to submitting! Be the change you want to see.
twoodfin 3 hours ago [-]
I’m SOO happy but also wistfully sad when I open a post like this that I am desperately excited to read and it’s not muddled-thinking- and LinkedInese-riddled slop.
OhMeadhbh 4 minutes ago [-]
Presumably this means you could also port MacOS 9 if you were okay with writing a few drivers and patching some virtual ROMs.
guyzero 5 hours ago [-]
In addition to the incredible engineering work here the OP casually flexes by showing the development happening _in an economy class airplane seat_.
nine_k 5 hours ago [-]
This is the most incredible part. I cannot even use a laptop adequately in an economy class seat, I cannot position the screen so that I could see it, and the keyboard so that I could type on it, at the same time. (To say nothing of connecting a Wii.)
dan353hehe 54 minutes ago [-]
I think it is a bus maybe? I can see out a window over some seats, and the overhead compartments don't really look like ones i've seen before.
That being said, that is absolutely amazing they brought a wii where ever they were going to write and debug this while traveling! That is dedication!
EDIT: nvm, there are multiple pictures of them traveling. First one looks bus like, second one look like an airplane.
jedberg 4 hours ago [-]
And the guy next to him is just staring at his phone, probably thinking, "I'm not even gonna ask".
Although if it were me I'd probably annoy the heck out of him asking why he had a Wii on the airplane!
hbn 3 hours ago [-]
Looks like a Switch 2 actually.
jedberg 3 hours ago [-]
You're totally right, it's a Switch 2.
pa7ch 5 hours ago [-]
I can't imagine concentrating on a complicated project like that on the go, but I went back to stare in awe at said picture and I think its a train or bus. Still a flex.
ooboe 1 hours ago [-]
The picture with the black seats in on a train and the one with the green seats is on a plane.
badc0ffee 4 hours ago [-]
Still looks like a plane to me, with rows of 2-3-2 seats.
There are definitely no buses that wide.
blkhp19 4 hours ago [-]
My Wii has been on many planes and trains - and yes, there is a photo of each in my post.
jventura 3 hours ago [-]
It seems a bus to me, just look at the size of the windows. Airplanes don't have windows like that..
eastbound 5 hours ago [-]
Which means no access to Claude.
Can’t wait for his sequel “I received a Cease and Desist Letter from Apple; Feeling encouraged, I registered the trademark ‘Wii subsystem for macOS’”.
slackfan 5 hours ago [-]
What's flex-worthy about this? There's a lot of dev work that goes on in economy class airplane seats. Or are VC valley programmers so rich they fly business everywhere?
badc0ffee 4 hours ago [-]
It's uncomfortable and awkward (the Wii was on his leg in the first shot), and often you need to break concentration and pack things up to let someone out of or into their seat.
slackfan 3 hours ago [-]
So what you're saying is if it's flexing, it's entirely performative. gotcha.
I don't think that's a healthy way to look at it - dude was just getting some work done, but maybe I'm a broken human being who's churned out more code than I would ever admit while sitting in 32C on a cross-country flight.
varispeed 4 hours ago [-]
Imagine if he was developing it on a laptop found at a refuse site that was still charged, just hiding in the hedge so that guards wouldn't see him.
jmcneill 59 minutes ago [-]
As the author of the NetBSD Wii and Wii U ports, congrats! I’m looking forward to seeing how you solved some of the problems that I faced along the way.
blkhp19 28 minutes ago [-]
Your ports were a huge inspiration - thanks for contributing so much to this space!
raincole 2 hours ago [-]
> As for RAM, the Wii has a unique configuration: 88 MB total
TIL Wii has only 88MB of RAM. Fortunately games weren't electron-based.
zamadatix 2 hours ago [-]
Another funny history fact with the Wii is Windows Vista released the same month in North America. People were so upset that the minimum requirement for Vista said 512 MB (which was already more than the average existing home PC of the time had without an upgrade) but it ran like crap unless you had more.
We truly had to get away with less back then. These days it feels like there is a bit more headroom where 8 GB is on the downtrend, 16 GB is becoming the most common, and the user's apps are enjoying the extra fat.
TazeTSchnitzel 1 hours ago [-]
The Wii settings menu is an HTML webpage. Yes, even 2006 games consoles were not spared the web.
soci 5 hours ago [-]
Back in the day I was a hardcore Mac nerd and became a professional at it too. My best reverse-engineering trophy was building one of the first "iOS" apps when there was not an official appstore for the iPhone.
But man, this is way ahead of what I could do. What this dude accomplished blew my mind. Not only the output (running MacOS on a Wii), but the detailed post itself. A-MA-ZING.
blkhp19 3 hours ago [-]
Thank you for the kind words :)
hoten 53 minutes ago [-]
Wonderful write up, thank you for sharing!
> In the end, I learned (and accomplished) far more than I ever expected - and perhaps more importantly, I was reminded that the projects that seem just out of reach are exactly the ones worth pursuing.
Couldn't agree more. I've had my own experience porting something that seemed like an intractable problem (https://news.ycombinator.com/item?id=31251004), and when it finally comes together the feeling of accomplishment (and relief!) is great.
lampiaio 3 hours ago [-]
As someone who's been trying to do something VERY similar (port Mac OS 9 to the Nintendo Wii U), all I can say is I'm 1) absolutely impressed, and 2) absolutely encouraged, as my project keeps telling me "this is impossible" at every opportunity.
blkhp19 3 hours ago [-]
Very cool! I'd love to learn more. That seems extra challenging considering Mac OS 9 is closed source!
k38f 4 hours ago [-]
Debugging kernel panics on a Wii in an economy seat is a level of focus I can't even imagine. Most people can't read a book on a plane without losing their place every 5 minutes.
samtheDamned 1 hours ago [-]
This was an incredible read! Especially for what looks like the first post to this blog too? I wanted to subscribe to the RSS feed but unfortunately it gives a 404 error.
bsimpson 3 hours ago [-]
This is excellent.
YUV appears to be a PAL-specific color space. I wonder how off an NTSC Wii would be. Presumably it would have the wrong color space until an equivalent conversion scheme was devised for NTSC.
I was surprised to see regional color spaces leak into the project, but I presume that Nintendo's iOS (the coincidentally-named system this is replacing) could handle that abstraction for game developers.
duskwuff 2 hours ago [-]
YUV is a color model, akin to RGB or HSL; it's independent of video formats like NTSC or PAL.
TazeTSchnitzel 1 hours ago [-]
That's true in broad strokes, but looking into it, it turns out NTSC's variant of YUV is called YIQ, and SECAM's variant is called YDbDr. They are however all more or less the same thing, and the digital YUV used by the Wii hardware in this case is presumably independent of the video standard.
1 hours ago [-]
nickpeterson 4 hours ago [-]
The one that really bugs me is the Apple TV. It would be a great little box to use for terminals/thin client style work and there are a ton of old cheap ones. Having a $50 dollar used box that was low power and could run OSX would be great.
The original one does run a modified OS X Tiger. I jailbroke it a while ago to run custom stuff, but didn't do much with that. Just remember being able to VNC or SSH into it.
leonidasv 5 hours ago [-]
Nice work and write-up!
A side note: you embedded .mov videos inside <img> tags. This is not compatible with all browsers (notably Chrome and Firefox), which won't load the videos.
efdee 5 hours ago [-]
If it's not working on Chrome nor Firefox, it's safe to say it's incompatible with almost all browsers.
blkhp19 5 hours ago [-]
I only tested on Safari - whoops! Fixed now.
tverbeure 5 hours ago [-]
Minor usability comment: the screenshots are too small to be readable. Whenever that's that case in my blog posts, I make those screenshots clickable and add (Click to enlarge) below it, to make it easier for readers to see the image are original resolution. In markdown, I do that like this:
[ ](image_url.png)
(Of course, I can also right-click and do "Open image in new tab", but that's one click extra...)
Congrats on the awesome project, BTW! You were lucky that I wasn't sitting next to you on the plane. I would have wasted so much of your time asking dumb questions.
blkhp19 4 hours ago [-]
Images now expand when clicked - thanks for the feedback!
tengbretson 2 hours ago [-]
Works on Orion.
leonidasv 5 hours ago [-]
It works on Safari.
blkhp19 5 hours ago [-]
Whoops, thanks! Fixed.
AnnikaL 52 minutes ago [-]
Wow! This is really impressive!
I kind of want to try some project like this sometime, but I wouldn't even know where to start...
tiffanyh 5 hours ago [-]
Amazing work.
If you like this story, you might also like the story of how Mac OS X was ported to Intel as well.
Congrats, great project and great writeup. That would have won MacHack back in the day.
Now that the MacBook Neo has an A18, I wonder if you could get MacOS running on an iPhone? :)
krsw 3 hours ago [-]
There is a zero percent chance of that ever happening.
gaudystead 2 hours ago [-]
Are you willing to elaborate on the _why_ or is this a challenge comment, similar to the reddit comment that spurred this project? ;)
Xerox9213 3 hours ago [-]
Or better yet, an iPad!
LoganDark 3 hours ago [-]
I wonder if you can place an A18 from a Neo onto an iPhone board, and then make that work somehow... You wouldn't be able to use the one originally from the iPhone because it's differently fused to only accept iOS images.
circuit10 16 minutes ago [-]
Is it possible that a jailbreak is found that could allow a “kexec” kind of thing to load a new OS? Of course it would be a huge amount of work even if theoretically possible
zadikian 4 hours ago [-]
My favorite part of this is the detour to ask for the IOUSBFamily src on IRC
tombelieber 3 hours ago [-]
This rules. It’s exactly the kind of cursed side quest that sounds fake until you read the writeup and realize you actually did the work.
chrisweekly 1 hours ago [-]
Haha, this is great. Very impressive -- and a fantastic, detailed writeup. Congrats! And thanks for sharing! :)
monkpit 6 hours ago [-]
> There is a zero percent chance of this ever happening.
Honestly, I would have said the same. Great work!
djsavvy 2 hours ago [-]
I'm shocked that the Wii only has 88mb of RAM. The programmers of that era really knew how to make a lot from a little!
cdrnsf 33 minutes ago [-]
Wonderful. Can it run Doom?
unanonymousanon 5 hours ago [-]
This is extraordinary, not only pushing the limit but documenting everything so clearly to show people what can be accomplished with time and dedication. Thank you for such thorough documentation, and congrats on getting it done!
cyrialize 2 hours ago [-]
The Wii is very moddable. I've modded my Wii in the past just for playing modded versions of Super Smash Brother Melee (mainly training packs, like flashing a red light when I miss an L-cancel).
dansalvato 2 hours ago [-]
I wrote that L-cancel training code! Funny to see it come up out of nowhere. I too have always adored the Wii and its moddability. It'd be my go-to choice if I someday ever get the itch to write console homebrew software of my own.
blkhp19 2 hours ago [-]
Yes - this project (and countless others) would not have been possible without the incredible work to hack the Wii from Team Twiizers (now fail0verflow) back in the day. The work they did was a huge inspiration for me getting into computer science when I was a teenager.
talkfold 45 minutes ago [-]
Brought the Wii to Hawaii to finish the framebuffer driver. Priorities perfectly set.
bredren 3 hours ago [-]
It is satisfying to see someone hacking on deprecated hardware and software also is keen to look forward into Vision Pro.
hassaanr 3 hours ago [-]
In love with projects that are done solely because 'why the hell not'. Fantastic writeup and work.
khernandezrt 1 hours ago [-]
Unrelated to the article but please compress your images. Why is one of them almost 8mb!?
MaxLeiter 5 hours ago [-]
Great write-up. I love hardware running software it shouldn’t support
swiftcoder 5 hours ago [-]
Damn, that's some dedication! Congrats on getting it running
delduca 2 hours ago [-]
The best hack of the last 10 years.
WorldPeas 5 hours ago [-]
Given that the original Apple TV ran on a modified version of macos, what are the chances one could turn an old wii into an Apple TV..?
EDIT: also, I just noticed on a second pass the system is addressing 78mb of ram, potentially meaning the ram spans the gddr3 and sram, I'm amazed this works as well as it does with seemingly heterogeneous memory
zydeco 4 hours ago [-]
I'd say there is a zero percent chance of this ever happening :D
The original Apple TV was an Intel Core Solo with 256 MB of RAM and an nVidia GPU, running a modified Mac OS X 10.4 that booted into something similar to Front Row instead of Finder.
WorldPeas 4 hours ago [-]
Oh interesting, it looks like that geforce had an entire 64mb of gddr3 too, it'd still be fun to see if one could limbo that low, though I agree that save for upgrading the BGA ddr3 of the wii to something more the size of the dev kit had(128mb GDDR3)
4 hours ago [-]
CrazyStat 4 hours ago [-]
Apple TV came after the switch to Intel processors, so you would have to have some kind of reverse-Rosetta layer to run it on a PowerPC Wii.
zadikian 4 hours ago [-]
Tiger had a native PPC version too
zdware 5 hours ago [-]
Fun post.
Always great when your debugging feedback is via a led xD
dpedu 3 hours ago [-]
How about a piezoelectric buzzer? That's how the firmware on some iPods were first dumped.
And here I am shopping for Macs because getting a hackintosh working from a VM on Windows is too difficult for me.
vsgherzi 4 hours ago [-]
This is some amazing work, a good reminder to dig more into operating systems for myself!
oliad1 3 hours ago [-]
Nice project! Love seeing emulators & ports
carlosjobim 3 hours ago [-]
They are successfully porting Mac OS onto every kind of modern computer over at the hackintosh subreddit, and I can't understand why there is so little interest for this stuff in the "hacker" sphere.
Surely, it must be a better option than Linux if you want to get the most out of a PC computer? At least for 10 more years.
I'm not sure why it would. Why would anyone want to hack on different proprietary software with no supplier support and whose days are clearly numbered (Apple's move to ARM)?
For usability I mean. It's clearly an interesting technical feat.
carlosjobim 3 hours ago [-]
Because it has all the advantages of Linux + all the advantages of Windows + many advantages of its own.
So to have a fully fledged and more usable computer, for those who don't want to purchase the Apple hardware.
And the latest Mac OS still supports Intel, so you'll get many more years out of a machine. For what I know, the last 10 versions of MacOS are still very usable.
mghackerlady 6 hours ago [-]
I'm pretty sure someones done this for the 360. Also, doesn't NT have a wii port?
nticompass 6 hours ago [-]
There was a PPC version of Windows NT, and yes someone put it on the Wii!
That was it, I knew someone ported an OS to a Wii recently, thank you
mlfreeman 1 hours ago [-]
Uh, I just noticed the Windows NT for GameCube port actually claims Wii support too...so maybe one day we'll see a Wii dual boot NT4 and OS X 10.0
xoxxala 5 hours ago [-]
Very neat project and an extremely enjoyable read.
anthk 1 hours ago [-]
Not OSX, but I'd love what Aros m68k is doing with the Amiga but for Mac OS System7.
Yes, I know about Ardi Executor being libre and enhanced now, but that's not the point.
I'd love to spawn MiniVMAC with a free system ROM replacement and a free Mac OS 7 reimplementation.
spiderice 3 hours ago [-]
I bet if me-20-years-ago knew that current me would have no fucking clue how to even begin to tackle a problem like this, me-20-years-ago would be very disappointed. Very jealous of your expertise. Awesome work!
nticompass 6 hours ago [-]
This is awesome! I can't wait to plug in my Wii and give it a try myself.
hirvi74 6 hours ago [-]
Exceptional work. While it may not mean much, I am truly impressed. I like to toy with reverse engineering here and there, but such a port like this would take me multiple lifetimes.
Not to distract too much from the main topic, but what do you think about the Hopper disassembler? I have only used Radare2, IDA Pro, and Ghidra. Though, I haven't used the latter two on MacOS. What do you prefer about Hopper? I have been hesitant to purchase a license because I was never sure if it was worth the money compared to the alternatives.
blkhp19 5 hours ago [-]
Thank you for the kind words!
I like using it for disassembling UIKit (for my day job working on iOS apps), and overall, I like the UI/UX and how it feels like a native Mac app.
I've tried Ghidra, and while extremely impressive and capable, it might be the most Java-feeling app I've ever used. I'd love for someone to whip up an AppKit + SwiftUI shell for it.
xandrius 5 hours ago [-]
You made me curious: why would you need to disassemble UIKit for iOS as part of your day job?
blkhp19 5 hours ago [-]
There are bugs and undocumented behaviors that need to be understood in order to be worked around - I wish it wasn't the case but such is life developing for closed-source platforms.
crazysim 5 hours ago [-]
Sometimes things aren't documented and sometimes they could be documented wrong.
hirvi74 4 hours ago [-]
> I like using it for disassembling UIKit (for my day job working on iOS apps), and overall, I like the UI/UX and how it feels like a native Mac app.
You are correct about the UI/UX. I do think Hopper is ahead of others in that regard. Though, Radare2 being a CLI tool is nice as well. Though, I haven't attempted to use Radare2 for MacOS/iOS disassembly. Though I must ask, why are you disassembling UIKit? Looking for private API behavior or working around bugs? I've been learning more about iOS in my spare time, because despite my love for Swift, I have never used it for iOS. I only have used Swift for MacOS automation, i.e., AppleScript replacement via the Accessibility, Core Foundation, AppKit, etc..
> Ghidra, and while extremely impressive and capable, it might be the most Java-feeling app
I chuckled while reading this because I had the exact same thought when I first used Ghidra. I haven't tried Ghidra on MacOS because I will not taint my machines with the impurities of Java. I also do not want to enable Rosetta, so that was another obstacle in trying Ghidra on MacOS. In Ghidra's defense, using Java was a pragmatic choice. The "write once, run anywhere" promise of Java is likely a near-necessity for a disassembler for government operations.
blkhp19 4 hours ago [-]
> Looking for private API behavior or working around bugs?
Exactly this!
davenporten 5 hours ago [-]
Hahaha! Yes! We need more of this in the world, love it!
kogasa240p 4 hours ago [-]
Wonder if it can happen on the Wii U
blkhp19 3 hours ago [-]
With the extra RAM, higher clock speed, and no need to waste CPU cycles converting YUV -> RGB framenbuffers - I bet it would be!
rado 4 hours ago [-]
Great, how about on iPhone?
c0_0p_ 5 hours ago [-]
Fantastic work and a great write up.
postalcoder 3 hours ago [-]
Sorry if off topic but I was struck by the view from your window. Were you in Hanalei Bay?
blkhp19 3 hours ago [-]
I was - incredible views indeed!
postalcoder 3 hours ago [-]
Your post and pictures brightened up my day. Thanks!
dejongh 3 hours ago [-]
Great hack!
lanyard-textile 6 hours ago [-]
Absolutely atrocious. Congratulations!
That's the hacker spirit.
serhack_ 5 hours ago [-]
awesome, good to see some real content from pre-AI moment
eats_indigo 5 hours ago [-]
honestly expected this port to be headed in the opposite direction
rdanieli 4 hours ago [-]
nice!
stavros 5 hours ago [-]
This is excellent, though if you had chosen another OS, you could have called the project Wiindows.
EDIT: Oh interesting, the final paragraph says NT has been ported, didn't know that. Sadly, no pun is mentioned in that project.
snazz 5 hours ago [-]
“entii-for-workcubes” is a pretty good pun!
stavros 4 hours ago [-]
I don't know man, "Wiindows" was right there and they chose "entii"? I weep for the missed opportunity more than anything.
Maybe it was a legal worry.
rvz 5 hours ago [-]
The post is a work of an actual hacker who knows what they're doing. Zero mention of "I used Claude" or "Used AI" to understand what is needed for accomplish this task.
This is exceptional work. Unlike the low-effort slop posts I see here on "Show HN".
blkhp19 5 hours ago [-]
I used plenty of non-agentic AI to help understand the XNU codebase, and also research various topics. It wasn't always correct, but it certainly helped at times! My philosophy for this project was to use it as a learning tool - since that was kind of the whole point of me attempting this :)
dirasieb 4 hours ago [-]
looks like they did use AI, swing and a miss for the luddites once again!
bigyabai 5 hours ago [-]
Ah, the Procrustian definition of "real hacker", where using AI disqualifies you but using Github pages is considered only a minor infraction.
The build-in-public era of hacking has really turned this field into an influencer economy.
jasaldivara 5 hours ago [-]
Whats wrong about Github pages?
dewey 5 hours ago [-]
A real hacker would obviously never use a Microsoft product, or worse, post on a VC funded web forum!
bigyabai 2 hours ago [-]
Absolutely nothing. People protest Github to virtue signal their anti-Microsoft sentiment and fill a hole in their personality.
Similarly, "zero mention of AI" is just a surface-level observation that says nothing about how the project was completed and everything about your own insecurities defining the word hacker.
zenlot 4 hours ago [-]
[dead]
ValveFan6969 2 hours ago [-]
[dead]
anskksdkdkdk 4 hours ago [-]
[flagged]
ynajjarine 3 hours ago [-]
[flagged]
duskwuff 2 hours ago [-]
I bet there's some way to make the GPU do the color conversion. It's not like it's doing much otherwise...
MarioMan 16 minutes ago [-]
It looks like copying from EFB to XFB can do an RBG to YUV conversion automatically.
blkhp19 2 hours ago [-]
Last I checked, the 60fps frame buffer conversion resulted in the system idling at 18% CPU. Certainly not ideal. I'd love to optimize this further.
dmitrygr 3 hours ago [-]
This solution’s COU cost can be significantly improved by using memory protection. You protect the frame buffer from writes. The first time it is written, you take a fault, and start refreshing every 60 Hz and leave it writeable. After some number of refreshes, you protect it again, the idea being is that the UI may now be quiescent. I do this in my Palm OS port for the same reason.
blkhp19 2 hours ago [-]
I'm intrigued by this technique! Will look into it, thanks for the tip!
dmitrygr 44 minutes ago [-]
sample impl is in rePalm sources, but i described basically all there is to it :)
My favorite was “it’s impossible to know which DB is failing from a stack trace”. I created STAIN (stack traces and instance names): a ruby library that would wrap an object in a viral proxy (all returns from all methods are themselves proxies) that would intercept all exceptions and annotate the call stack with the “stain”ed tag.
They've also been useful more than once, e.g. you can do that to know what iteration of a loop failed. There are of course other ways to do this, but it's hard to beat "stupid, simple, and works everywhere" when normal options (e.g. logs) stop working.
Funny enough about the Dropbox comment, it caught so much flak that it’s gone full circle and I’ve often found people defending it saying what the guy said made sense at the time etc
I guess Reddit is just less empathetic than HN
Impressive work! Now run Dolphin on it. ;)
Plus the internet basically equates cynicism with intelligence
There is somehow no concept of "ignorant cynicism"
> - Everything is magenta.
was fun too
My favorite part of our online world.
>Go ahead and downvote me. I am correct on every single thing I said
> The Wii uses a PowerPC 750CL processor - an evolution of the PowerPC 750CXe that was used in G3 iBooks and some G3 iMacs.
Hilarious.
> At this point, the system was trying to find a framebuffer driver so that the Mac OS X GUI could be shown. As indicated in the logs, WindowServer was not happy - to fix this, I’d need to write my own framebuffer driver.
I'm surprised by how well abstracted MacOS is (was). The I/O Kit abstraction layers seemed to actually do what they said. A little kudos to the NeXT developers for that.
With that said, I haven't developed drivers for any other platforms, so I really can't say if the abstraction is good compared to what's used by modern systems.
That said, indeed, the abstraction layer here is delightful! I know that some NetBSD devs managed to get PPC Darwin running under a Mach/IOKit compatibility layer back in the day, up to running Xquartz on NetBSD! With NetBSD translating IOKit calls. :-)
Steve was not a developer but he made it his business to care about what they cared about.
But that's a hazy, 20 year old memory.
I had been under the impression that DriverKit drivers were quite a different beast, but they're really not. Here's the layout of a NS ".config" bundle:
The driver itself is a Mach-O MH_OBJECT image, flagged with MH_NOUNDEFS. (except for the _reloc images, which are MH_PRELOAD. No clue how these two files relate/interact!)Now, on OS X:
OS X added a dedicated image type (MH_KEXT_BUNDLE) and they cleaned up a bit, standardized on plists instead of the "INI-esque" .table files, but yeah, basically the same.https://news.ycombinator.com/item?id=10006411
"At some stage in the future we may be able to move IOKit over to a good programming language"
Remember: there was a short window of time where everyone thought Java was the future and Java support was featured heavily in some of the early OS X announcements.
Also DriverKit's Objective-C model was not the same as userspace. As I recall the compiler resolved all message sends at compile time. It was much less dynamic.
Usually the difference between something being well-abstracted vs poorly-abstracted is how well it's explained.
I'm not an LLM post hater, but it definitely has been a bit draining lately. This is exactly what I love to see here.
That being said, that is absolutely amazing they brought a wii where ever they were going to write and debug this while traveling! That is dedication!
EDIT: nvm, there are multiple pictures of them traveling. First one looks bus like, second one look like an airplane.
Although if it were me I'd probably annoy the heck out of him asking why he had a Wii on the airplane!
There are definitely no buses that wide.
Can’t wait for his sequel “I received a Cease and Desist Letter from Apple; Feeling encouraged, I registered the trademark ‘Wii subsystem for macOS’”.
I don't think that's a healthy way to look at it - dude was just getting some work done, but maybe I'm a broken human being who's churned out more code than I would ever admit while sitting in 32C on a cross-country flight.
TIL Wii has only 88MB of RAM. Fortunately games weren't electron-based.
We truly had to get away with less back then. These days it feels like there is a bit more headroom where 8 GB is on the downtrend, 16 GB is becoming the most common, and the user's apps are enjoying the extra fat.
But man, this is way ahead of what I could do. What this dude accomplished blew my mind. Not only the output (running MacOS on a Wii), but the detailed post itself. A-MA-ZING.
> In the end, I learned (and accomplished) far more than I ever expected - and perhaps more importantly, I was reminded that the projects that seem just out of reach are exactly the ones worth pursuing.
Couldn't agree more. I've had my own experience porting something that seemed like an intractable problem (https://news.ycombinator.com/item?id=31251004), and when it finally comes together the feeling of accomplishment (and relief!) is great.
YUV appears to be a PAL-specific color space. I wonder how off an NTSC Wii would be. Presumably it would have the wrong color space until an equivalent conversion scheme was devised for NTSC.
I was surprised to see regional color spaces leak into the project, but I presume that Nintendo's iOS (the coincidentally-named system this is replacing) could handle that abstraction for game developers.
A side note: you embedded .mov videos inside <img> tags. This is not compatible with all browsers (notably Chrome and Firefox), which won't load the videos.
[ ](image_url.png)
(Of course, I can also right-click and do "Open image in new tab", but that's one click extra...)
Congrats on the awesome project, BTW! You were lucky that I wasn't sitting next to you on the plane. I would have wasted so much of your time asking dumb questions.
I kind of want to try some project like this sometime, but I wouldn't even know where to start...
If you like this story, you might also like the story of how Mac OS X was ported to Intel as well.
https://news.ycombinator.com/item?id=4091216
I remember reading this back then. Amazing story. All the secrecy, and needing to be a very small team.
Now that the MacBook Neo has an A18, I wonder if you could get MacOS running on an iPhone? :)
Honestly, I would have said the same. Great work!
EDIT: also, I just noticed on a second pass the system is addressing 78mb of ram, potentially meaning the ram spans the gddr3 and sram, I'm amazed this works as well as it does with seemingly heterogeneous memory
Always great when your debugging feedback is via a led xD
https://web.archive.org/web/20050828114013/http://www.ipodli...
Surely, it must be a better option than Linux if you want to get the most out of a PC computer? At least for 10 more years.
https://www.reddit.com/r/hackintosh/
I'm not sure why it would. Why would anyone want to hack on different proprietary software with no supplier support and whose days are clearly numbered (Apple's move to ARM)?
For usability I mean. It's clearly an interesting technical feat.
So to have a fully fledged and more usable computer, for those who don't want to purchase the Apple hardware.
And the latest Mac OS still supports Intel, so you'll get many more years out of a machine. For what I know, the last 10 versions of MacOS are still very usable.
https://github.com/Wack0/entii-for-workcubes
See also: https://gbatemp.net/threads/windows-nt-ported-to-wii.667959/
Yes, I know about Ardi Executor being libre and enhanced now, but that's not the point.
I'd love to spawn MiniVMAC with a free system ROM replacement and a free Mac OS 7 reimplementation.
Not to distract too much from the main topic, but what do you think about the Hopper disassembler? I have only used Radare2, IDA Pro, and Ghidra. Though, I haven't used the latter two on MacOS. What do you prefer about Hopper? I have been hesitant to purchase a license because I was never sure if it was worth the money compared to the alternatives.
I like using it for disassembling UIKit (for my day job working on iOS apps), and overall, I like the UI/UX and how it feels like a native Mac app.
I've tried Ghidra, and while extremely impressive and capable, it might be the most Java-feeling app I've ever used. I'd love for someone to whip up an AppKit + SwiftUI shell for it.
You are correct about the UI/UX. I do think Hopper is ahead of others in that regard. Though, Radare2 being a CLI tool is nice as well. Though, I haven't attempted to use Radare2 for MacOS/iOS disassembly. Though I must ask, why are you disassembling UIKit? Looking for private API behavior or working around bugs? I've been learning more about iOS in my spare time, because despite my love for Swift, I have never used it for iOS. I only have used Swift for MacOS automation, i.e., AppleScript replacement via the Accessibility, Core Foundation, AppKit, etc..
> Ghidra, and while extremely impressive and capable, it might be the most Java-feeling app
I chuckled while reading this because I had the exact same thought when I first used Ghidra. I haven't tried Ghidra on MacOS because I will not taint my machines with the impurities of Java. I also do not want to enable Rosetta, so that was another obstacle in trying Ghidra on MacOS. In Ghidra's defense, using Java was a pragmatic choice. The "write once, run anywhere" promise of Java is likely a near-necessity for a disassembler for government operations.
Exactly this!
That's the hacker spirit.
EDIT: Oh interesting, the final paragraph says NT has been ported, didn't know that. Sadly, no pun is mentioned in that project.
Maybe it was a legal worry.
This is exceptional work. Unlike the low-effort slop posts I see here on "Show HN".
The build-in-public era of hacking has really turned this field into an influencer economy.
Similarly, "zero mention of AI" is just a surface-level observation that says nothing about how the project was completed and everything about your own insecurities defining the word hacker.
saves a lot of CPU
Well, okay, that's almost cheating.