Table of Contents >> Show >> Hide
- Illumos in 90 Seconds: What It Is (and Why People Still Care)
- Why a New C Compiler Is a Big Deal on illumos
- Meet PCC: The “Portable C Compiler” That Refuses to Retire
- So What Changed? PCC Now Runs on illumos
- What You Can Do With PCC on illumos (Right Now)
- What PCC Probably Won’t Replace (and Why That’s Fine)
- Why illumos Benefits From Compiler Diversity
- Practical Tips: How Developers Can Take Advantage of PCC
- Where This Could Go Next
- Conclusion
- Experiences From the Trenches: What Working With PCC on illumos Feels Like (and Why You’ll Learn a Lot)
- SEO Tags
Every so often, a long-running operating system project does something wonderfully “old school” that still feels
surprisingly modern: it gets another C compiler. That’s what happened when illumos gained support for the
Portable C Compiler (PCC)a name that sounds like it should come with a beige keyboard and a cup of
burnt coffee, yet still solves real problems in 2026.
If you’ve never touched illumos, here’s the short version: it’s a Unix-like operating system descended from the
OpenSolaris lineage, powering several “Solaris-but-open” distributions and infrastructure-grade systems. And like
any Unix worth its salt, it lives and dies by its toolchain. A new compiler isn’t just a shiny toyit’s another
way to build, test, validate, bootstrap, and keep the ecosystem from becoming dependent on a single fragile path.
Illumos in 90 Seconds: What It Is (and Why People Still Care)
illumos is the community continuation of OpenSolaris technology: a kernel, core libraries, and
a large set of system utilities aimed at the “serious Unix” crowd. It’s the foundation beneath multiple
distributions (think server-first, virtualization-heavy, and very comfortable in a rack).
illumos has a reputation for features that system engineers love: mature ZFS integration, virtualization concepts
that feel like they were designed by people who actually ran production workloads, and a culture that prizes
correctness and introspection. That last part matters a lot when you’re talking compilersbecause toolchains are
where correctness goes to get complicated.
Why a New C Compiler Is a Big Deal on illumos
On many platforms, “the compiler” is whatever ships by default: GCC, Clang, and everyone goes home. illumos has
historically been more… nuanced. Toolchain decisions were shaped by compatibility goals, older workflows, and the
reality that parts of the ecosystem leaned on specific behaviors from specific compilers and tools.
The Shadow Compiler: Extra Paranoia, the Good Kind
One distinctive illumos tradition is shadow compilation: compiling code with a primary compiler,
then optionally compiling again with a secondary toolchain to catch edge cases. The idea is simple:
if two compilers disagree, you’ve learned something valuable about your code, your assumptions, or both.
Shadow compilation is not about making builds slower for fun (though it can feel that way). It’s about reducing
the risk that one compiler’s blind spot becomes the project’s blind spot. It’s also a hedge against toolchain
bit-rot: when you can build and test with more than one compiler, you’re less likely to get trapped.
The Legacy Reality: Closed Tools, Old Versions, and Practical Friction
Historically, parts of the illumos ecosystem relied on older or specialized compiler setupssometimes including
tooling from the “Developer Studio / Sun Studio” era, and sometimes involving patched GCC versions used to satisfy
constraints unique to the platform. Even when the community moved toward more open toolchains, the build story
could involve extra steps and environment variables that make newcomers squint.
This context makes the arrival of PCC more interesting than it sounds. It’s not “yet another compiler” in the way
a new JavaScript bundler is “yet another bundler.” It’s a tool with a different heritage and design philosophyone
that can be useful precisely because it is different.
Meet PCC: The “Portable C Compiler” That Refuses to Retire
PCC traces its roots back to the classic Unix era. The modern project keeps the spiritsmall,
portable, multi-targetwhile supporting C99 and some additions from later standards. PCC is not
trying to out-benchmark GCC in a microarchitecture shootout. It’s trying to be understandable, adaptable, and
practical across environments.
In plain English: PCC is the kind of compiler you want when portability, simplicity, or bootstrapping matters.
It’s also the kind of compiler that can be a lifesaver when the “main” toolchain is temporarily awkwardbecause
maybe you’re bringing up a new environment, testing assumptions, or you simply want another independent
implementation to sanity-check your code.
So What Changed? PCC Now Runs on illumos
The headline “illumos gets a new C compiler” is really shorthand for a specific achievement:
PCC was ported to work properly in a 64-bit Solaris-like environment on x86_64.
The fun irony: PCC already knew how to generate x86 code, and it had historical Solaris-family configuration work.
The missing piece was solid 64-bit x86 Solaris-like support in the build/config machinery. The port
involved teaching PCC’s configure logic about that environment and smoothing differences between the tools you
might assume exist on Linux versus what’s typical on illumos.
Small Details That Matter: Linker Flags and Platform Defines
Porting compilers is often 10% “big ideas” and 90% “the linker is looking in the wrong place.” In this case, the
port effort included practical linker behavior updatessuch as emitting identification metadata similarly to other
toolchains, and ensuring PCC searches the right default library directories on illumos.
Another classic portability detail: preprocessor defines. On real-world projects, platform macros are a language
of their own. Adding a sensible __illumos__ define helps software detect the environment cleanly,
instead of guessing based on “Solaris-like but not Solaris.”
What You Can Do With PCC on illumos (Right Now)
Let’s be honest: most illumos systems won’t switch their entire world to PCC overnight. That’s not the point.
The point is that PCC becomes a new optionand options matter.
1) A Second (or Third) Opinion for Tricky C Code
C is a language where “works on my compiler” is not a compliment. Building the same code with GCC/Clang and PCC
can reveal undefined behavior, questionable assumptions, or edge-case reliance on one compiler’s quirks.
Even if you never ship PCC-built binaries, the diagnostics value can be huge.
2) Bootstrapping and Portability Work
If you’re bringing up a new environment, resurrecting older software, or trying to reduce the number of moving
parts needed to compile a minimal userland, PCC’s portability-focused design can be attractive. Smaller, simpler
toolchains are often easier to reason about during early bring-up.
3) Building Smaller Tools and Utilities Without Drama
Plenty of real software doesn’t need the newest optimizer trick or the most aggressive vectorization. For
straightforward C99-ish code, PCC can be a practical alternative, especially when you want a quick compile that’s
“good enough” and easy to debug.
What PCC Probably Won’t Replace (and Why That’s Fine)
GCC and Clang remain the heavy hitters for modern systems work: extensive language support, broad ecosystem
integration, sanitizers, advanced optimizations, tooling, and community momentum. illumos itself has deep build
conventions, historical constraints, and workflows that don’t evaporate just because a new compiler arrived.
PCC’s value is not that it becomes “the one true compiler.” Its value is that it becomes:
a credible additional compiler. That improves resilience.
Reality Check: Standards, Extensions, and Modern Expectations
Many contemporary C projects quietly rely on compiler extensions, nonstandard build flags, or newer language
features beyond baseline C99. GCC and Clang are extremely good at meeting those expectations. PCC can be perfectly
capable for many workloads, but you should expect to run into cases where a project assumes a GCC/Clang-specific
extension and needs a portability patch.
The upside? Those patches are often good engineering. When you make code less compiler-dependent, you usually make
it more correct and more maintainable.
Why illumos Benefits From Compiler Diversity
1) Less Toolchain Monoculture
When a platform has only one “real” compiler path, every toolchain hiccup becomes existential. New versions break
something. Old versions become insecure. Packaging gets messy. Knowledge concentrates in a few maintainers.
A second compiler reduces that pressure.
2) Better Testing Through Disagreement
A compiler is a giant pile of assumptions and heuristics, no matter how mature it is. Running multiple compilers
against the same codebase can flush out undefined behavior and subtle bugs earlierbefore those bugs show up in
production at 3:00 a.m., when your pager is already angry.
3) Long-Term Sustainability
illumos is a long game. It isn’t chasing trends; it’s trying to remain useful and correct over decades.
Toolchain diversity supports that mission by keeping the project from being tied too tightly to any single vendor,
single set of patches, or single ecosystem wave.
Practical Tips: How Developers Can Take Advantage of PCC
Start With the Right Expectations
Treat PCC as an additional tool in your toolbox. Use it to:
compile smaller projects, validate portability, and cross-check warnings. If you’re maintaining software intended
for illumos distributions, test-building with PCC can uncover assumptions that will bite you later.
Use PCC as a Portability “Fitness Test”
Here’s a practical workflow:
- Build with your usual compiler (often GCC or Clang, depending on your environment).
- Build with PCC and note what breaks: headers, feature checks, attributes, inline assembly, etc.
- Fix the code, not the symptoms: prefer standards-based solutions and clean feature detection.
- Re-test both so you don’t “fix” PCC by accidentally breaking GCC/Clang.
Keep Platform Detection Clean
If your project needs illumos-specific logic, aim for clear feature tests and unambiguous platform macros
(e.g., checking for __illumos__ when appropriate). Avoid fragile “Solaris-like” guessing whenever you can.
Where This Could Go Next
The arrival of PCC on illumos won’t instantly rewrite the platform’s build history, but it does signal something:
the ecosystem still values deep engineering fundamentals. A new compiler is a vote for portability, resilience,
and honest-to-goodness Unix practicality.
In the future, compiler work on illumos will likely continue to focus on pragmatic outcomes:
smoother builds, clearer standards adoption, improved tooling, and less dependence on legacy components.
PCC’s presence strengthens that direction by providing another open, portable option that the community can use
for testing, bring-up, and sanity checks.
Conclusion
“Illumos gets a new C compiler” sounds like a niche headlineuntil you remember what compilers represent:
the ability to build the system, to validate it, to keep it honest, and to keep it alive. By bringing PCC to
illumos, the community added another independent implementation of C compilation to the platform. That’s not just
nostalgic. It’s strategic.
If you maintain software that targets illumos (or you’re simply curious about Solaris-like systems), PCC is worth
paying attention to. Even if you never ship PCC-built binaries, you can use it as a portability test, a
correctness spotlight, and a reminder that the best Unix engineering is often the kind that gives you options.
Experiences From the Trenches: What Working With PCC on illumos Feels Like (and Why You’ll Learn a Lot)
Let’s talk about the “experience” partbecause a new compiler isn’t just a checkbox, it’s a new flavor of reality.
The first thing you notice when you try to use PCC on illumos is that it doesn’t behave like a carbon copy of your
usual toolchain. And that’s the point. PCC forces you to look at your build scripts the way an operating system
does: literal-minded, unapologetic, and occasionally amused by your optimism.
A common early moment is the configure script reality check. Many projects assume Linux-ish defaults:
certain utilities available, certain linker behaviors, certain directories that “obviously” exist. On illumos,
you quickly learn that “obvious” is a Linux dialect, not a universal truth. If your build process relies on
assumptions about where 64-bit libraries live, PCC will politely remind you that the system has opinions about
paths, and those opinions have been earning paychecks longer than your dependency tree has existed.
The next experience is the delightful parade of flags and defines. With GCC or Clang, you might get used to
tossing in a handful of familiar options and calling it a day. PCC, especially in a newly supported environment,
makes you pay attention to the boundary between compiler and linker. You start noticing which flags affect
compilation versus linking, what metadata ends up in the binary, and how the toolchain decides where to look for
libraries when you don’t explicitly hold its hand. This is the kind of knowledge that feels boring right up until
the day a production build breaksthen it becomes the difference between “quick fix” and “weekend project.”
There’s also the “aha” moment where you realize PCC is a portability teacher. If your codebase uses compiler
extensions, PCC doesn’t get angry; it gets instructional. It nudges you back toward standards-compliant C, better
feature detection, and cleaner separation between platform logic and core logic. Sometimes you’ll discover that a
“required” extension was really just habit. Other times, you’ll identify a truly platform-specific needand you’ll
implement it in a way that’s explicit and maintainable instead of being a mysterious build incantation.
Another very real experience is the comfort of having more than one opinion. When you build the same code with two
different compilers, you start to see where your project is relying on undefined behavior, questionable casts, or
“it works because the optimizer didn’t notice.” PCC can reveal issues that your primary toolchain has politely
ignored, and that feedback loop is gold. It’s like having a second reviewer who doesn’t care about your feelings
but does care about your pointers.
Finally, there’s a community vibe to all of this. People who run illumos systems tend to be the kind of folks who
appreciate engineering that stays solid over time. Adding PCC fits that culture: it’s not flashy, but it increases
resilience. And once you’ve used PCC for a few buildsespecially when porting or validating softwareyou start to
understand why this matters. It’s not about choosing a “winner.” It’s about keeping the platform buildable,
testable, and honest, even when the rest of the world is busy reinventing package formats for sport.