Adding support for SGI Altix back into LinuxPublished: 16-Mar-2026 - Last Updated: 6-Oct-2026 Linux removed support for the Altix in 2019, although it had been broken since 4.0 in 2015. To make matters worse, Itanium was removed from Linux in 2021. However, in 2026 with modern LLM tools, adding back support for a rare supercomputer is possible by one person that is not a kernel developer. This is an overview of my project to add support for the SGI Altix back into Linux. An alternate title for this could be "Using an LLM to support vintage computers", as I never would have been able to do this without extensive use of Claude Opus.
The LLM did much of the heavy lifting. I just directed it.
I think this project is a good example of using an LLM to keep an old computer alive
after support for it had been broken for over 10 years. Github Repohttps://github.com/nsafran1217/linux-sn2 The GPU enabled version is here: BackgroundThe SGI Altix is a ccNUMA SSI (Single System Image) supercomputer designed and manufactured by Silicon Graphics. The first version, the Altix 3000 was released in 2003 and was the first computer to support running Linux with more than 64 CPUs in a single system image. After releasing the "2nd generation" Itanium based Altix machines, the 450 and 4000, SGI moved to x86-64 processors for the Altix XE, Altix ICE, and Altix UV. Read the Wikipedia page for more information or the higher intellect wiki page. Altix (also called SN2 {scalable node 2}) was
removed from the Linux kernel for v5.4 in 2019
in preparation for the removal of ia64. During this process, the infrastructure
for supporting different machine types at runtime was removed. Since we don't re-add the machvec infrastructure, support for SN2 is decided at compile time, not at runtime.
Meaning a kernel compiled for SN2 will not run on a generic ia64 machine, and vice versa. MotivationI don't know, it sounded fun/interesting. Altix had been abandoned since about v3.10, and was fully broken after v4.0. I originally stopped at Linux v4.19.325, but I really wanted to work on getting the radeon driver working on Altix. I convinced myself that I needed a modern Linux distro to do this, and some folks in the T2 community suggested adding SN2 support back would be easier than building T2 with an older kernel. PreambleI knew that I could not do this by myself. I am not a kernel dev, I am not proficient at git, and I would consider myself as a beginner at C/C++. All my C/C++ experience comes from embedded projects on Ardiuno or ESP32, so jumping to the Linux kernel would be a large leap. However, it's 2026, and I have access to Claude.ai. I had used claude opus for a different C project a few weeks before starting this and was impressed with its output. I had tried to use ChatGPT and Copilot for help with getting radeon working about a year ago, but never really got anywhere with it. I couldn't give it enough context (at least with the free version). The ProcessSo how will we do this? I figured we should start with v5.4 and see what it will take to add SN2 back as it was removed; basically just reversing the removal patch. This mostly worked after fixing a few small changes in the kernel API. But reversing the patch touched a ton of files unrelated to SN2. I used claude and did this for v5.4 and 5.5, but I knew this wasn't a good way, especially if my target is v7.0. So I started a new project and chat in claude and sent this as the prompt:
And it generated a plan and generated the patches. And after a few build issues and one DMA issue on boot, it works. All without reimplementing machvec and touching all arch/ia64 files. This gave me the confidence to continue moving up in versions. So I started working through the versions, 5.4 -> 5.5 -> 5.10 -> 5.15 -> 6.1 -> 6.2 -> 6.3 -> 6.4 -> 6.6, After a 2 week break, I returned to the project and got SN2 support working on the master-epic branch of linuxia64. I kept track of the patches in this repo: https://github.com/nsafran1217/sn2-kernel-tools/tree/main/diff. In general, my fork of linux has all the patches and should be used to generate patch files if needed. I used a standardized prompt to start the forward porting process.
I would provide a tar file of the clean tree, a tar file of the previous patched version, and the patch for the previous version. This process worked great. Some of the versions would be done in 30 minutes. I'm sure an experience kernel dev could have also finished these versions in 30 minutes, but for someone with my skill level they would have taken a long time. Recurring issuesI had one difficult issue keep coming up during the process related to loading modules. This specific bug was introduced in v5.2,
but I didn't catch it then because I didn't have any USB devices plugged in. After plugging in a keyboard and mouse
to test modules, the issue happened almost every boot. After jumping to v6.16 from 6.6, the issue came back as the overrides we were using were no longer possible. Claude did recognize it would come back, though it recommended building modules into the kernel as a fix. After telling it to fix it, claude was able to implement a fix that is SN2 specific and hopefully continues to work for many more versions. Description here. The real root cause is an unfinished implementation in
24 years later, it was never fixed. Also during the jump to v6.16, a major bug was introduced which prevented the kernel from loading any binaries. This turned out to be a fix that was already introduced in other architectures, but was missed in ia64 since it was removed from Linux. HP Integrity and Ski were unaffected, but SN2 did not get lucky. This patch has been applied to the linux-ia64 branch. The ConclusionAt this point, I want to do some final cleanup and see if we can merge the changes into to linux-ia64 repo. Next steps: |