Skip to content
You can go your own way

Open source GZDoom community splinters after creator inserts AI-generated code

UZDoom fork promises to fix other top-down leadership problems with the decades-old mod.

Kyle Orland | 103
Artist's conception of GZDoom developers going off to create their own fork of the game. Credit: Prodigal's GZDOoom WADs
Artist's conception of GZDoom developers going off to create their own fork of the game. Credit: Prodigal's GZDOoom WADs
Story text

If you’ve even idly checked in on the robust world of Doom fan development in recent years, you’ve probably encountered one of the hundreds of gameplay mods, WAD files, or entire commercial games based on GZDoom. The open source Doom port—which can trace its lineage back to the original launch of ZDoom back in 1998—adds modern graphics rendering, quality-of-life additions, and incredibly deep modding features to the original Doom source code that John Carmack released in 1997.

Now, though, the community behind GZDoom is publicly fracturing, with a large contingent of developers uniting behind a new fork called UZDoom. The move is in apparent protest of the leadership of GZDoom creator and maintainer Cristoph Oelckers (aka Graf Zahl), who recently admitted to inserting untested AI-generated code into the GZDoom codebase.

“Due to some disagreements—some recent; some tolerated for close to 2 decades—with how collaboration should work, we’ve decided that the best course of action was to fork the project,” developer Nash Muhandes wrote on the DoomWorld forums Wednesday. “I don’t want to see the GZDoom legacy die, as do most all of us, hence why I think the best thing to do is to continue development through a fork, while introducing a different development model that highly favors transparent collaboration between multiple people.”

AI-way or the highway

Zahl’s project leadership has generated plenty of friction within the GZDoom development community over the years—this Reddit thread provides a brief history of some of the drama. But the inciting incident leading to this week’s UZDoom split seems to center in large part on Zahl’s open use of AI-generated code in a recent GZDoom update. While such use of AI coding tools is often hard to identify from the outside (as Zahl himself noted in a GitHub post), this particular instance was highlighted by Zahl’s own commented code snippet: “This is what ChatGPT told me for detecting dark mode on Linux.”

That comment led to a lengthy discussion among developers about the use of “stolen scraped code that we have no way of verifying is compatible with the GPL,” as one described it. And while Zahl eventually removed the offending code, he also allegedly tried to remove the evidence that it ever existed by force-pushing an update to delete the discussion entirely.

// This is what ChatGPT told me for detecting dark mode on Linux.
Graf Zahl code comment

Zahl defended the use of AI-generated snippets for “boilerplate code” that isn’t key to underlying game features. “I surely have my reservations about using AI for project specific code,” he wrote, “but this here is just superficial checks of system configuration settings that can be found on various websites—just with 10x the effort required.”

But others in the community were adamant that there’s no place for AI tools in the workflow of an open source project like this. “If using code slop generated from ChatGPT or any other GenAI/AI chatbots is the future of this project, I’m sorry to say but I’m out,” GitHub user Cacodemon345 wrote, summarizing the feelings of many other developers.

A fork in the road

In a GitHub bug report posted Tuesday, user the-phinet laid out the disagreements over AI-generated code alongside other alleged issues with Zahl’s top-down approach to pushing out GZDoom updates. In response, Zahl invited the development community to “feel free to fork the project” if they were so displeased.

Plenty of GZDoom developers quickly took that somewhat petulant response seriously. “You have just completely bricked GZDoom with this bullshit,” developer Boondorl wrote. “Enjoy your dead project, I’m sure you’ll be happy to plink away at it all by yourself where people can finally stop yelling at you to do things.”

Entire commercial games like Selaco are based on GZDoom‘s open source engine.
Entire commercial games like Selaco are based on GZDoom‘s open source engine. Credit: Altered Orbit Studios

In a community update posted to the ZDoom Discord, moderator Agent_Ash promised that the new UZDoom will maintain compatibility with old GZDoom saves and mods while adding new planned features in the future. But the new project will also provide “a more stable development structure with healthy collaboration and less power given to individual ‘project leads,'” Agent_Ash wrote.

In a Reddit thread discussing the UZDoom fork, Muhandes detailed how “UZDoom gets rid of the ‘one man decides everything’ / ‘my way or the highway’ development model. Everyone has to make pull requests that must be peer-reviewed thoroughly, and everything will be transparent—no one is allowed to commit directly to the master branch.”

“I have never seen something I’ve worked so hard on, for the past 2+ decades—a life passion of mine, you could say—implode this hard,” Muhandes added on Bluesky.

While GZDoom will continue to exist, Agent_Ash wrote that “it’s reasonable to assume that UZDoom will be the ‘main’ flagship version of the engine moving forward.” And while Zahl will be welcome to continue contributing to the new project, “UZDoom will not be led by him and he’s not going to have a final say on new features and changes,” Agent_Ash added.

The infighting over a modern source port of a 32-year-old game speaks highly of the deep cultural impact Doom continues to have on multiple generations of fans. Going forward, it’s hard to say how this dramatic split will affect the continued development of what has become a load-bearing part of the game’s continued legacy. For now, though, the move highlights how the use of AI coding tools has become a non-negotiable flashpoint for many in the world of open-source game development.

Photo of Kyle Orland
Kyle Orland Senior Gaming Editor
Kyle Orland has been the Senior Gaming Editor at Ars Technica since 2012, writing primarily about the business, tech, and culture behind video games. He has journalism and computer science degrees from University of Maryland. He once wrote a whole book about Minesweeper.
103 Comments
Staff Picks
graylshaped
I am under the impression that a primary benefit of the open source community is the transparency of its output, with an important side benefit being the engagement and involvement of those in the community on whose effort the project depends.

Tossing "AI" generated code in the mix seems rather to piss on those benefits.
h
Is the code actually poor or are some developers upset due to simply how the code was generated?
While it was primarily about ethics, it should also be noted that the code was described as being "impressively wrong", as well as not actually compiling. I mean, it basically checked if a theme was dark by if it had the word "dark" in the name - which is not a good heuristic - when better ways of doing it exist.
A
To quote the article: "Going forward, it's hard to say how this dramatic split will affect the continued development of what has become a load-bearing part of the game's continued legacy."

It's really not hard to say. Doom source ports have a very rich, long family tree and lots of new ports have been forked off or created. GZDoom itself is a derivative of ZDoom, which descends from ATBDoom, which was a Windows port of the Linux Doom source code release that John Carmack did.

GZDoom became a big community standard after Randi Heit finished development on ZDoom and announced ZDoom was finished with updates. GZDoom itself has already spawned at least one viable, continuing port prior to this in LZDoom.

And this is just the ZDoom side of the tree. While GZDoom was the most popular way for people to get into playing community Doom content for years, most really dedicated Doom fanatics (speedrunners, streamers, so forth and so on) play using DSDA-Doom. DSDA-Doom was started after PRBoom+ and its related GLBoom+ port were also finished and not getting any more updates. PRBoom+ is descended from PRBoom, which descended from Boom, which spawned from DosDoom, which was the John Carmack Linux source code release ported to DOS. DSDA-Doom had its own recent maintainer/owner controversy where the owner lost their mind over the id24 standard and tried to shut down the port over it. Other people coaxed him into retiring instead, and DSDA-Doom is happily keeping along.

This isn't even touching on any of the other ports that are still getting worked on. Like how the recent Night Dive Doom + Doom II collection was built on Rum & Raisin Doom. Or how one day Hellion will finally catch mainstream attention and you'll all be gawking at Babylon's Chimera going "how did someone do that in Doom" and it'll be actual Doom, not the modern map design features GZDoom has implemented over the years.

The other thing the article doesn't make clear is that the people who forked to make UZDoom are the same people who have been doing the vast majority of development on GZDoom for years. Graf Zahl wasn't just adding AI-generated code, but he was coming out of nowhere after a long period of inactivity to add it. So when Nash Muhandes, Agent_Ash, and the rest are creating the fork, they really do know what they're doing and how to keep development moving correctly. Unsurprisingly, looking at the GitHub project for UZDoom will show a lot of discussions that are like "this is a good change I already wrote but Graf Zahl turned it down, can we put it in now" and people are agreeing very quickly.

Finally, if people reading this are unfamiliar with the Doom community and wondering how hard it is to switch from one source port to the other. It's really not that hard, and it's even easier because UZDoom has GZDoom save game compatibility (so the only possible sticking point is already addressed.) At the simplest level I could download UZDoom, unpack the program somewhere, and run it - it will automatically recognize my doom.wad from Steam or wherever and use it. But if I want to continue my current game that I was playing just before the announcement of the fork, with all my extra customizations and stuff from being someone who plays Doom a lot? I'd just need to drag and drop two files (the community PWAD and my save game file) on the UZDoom executable and I'm perfectly away to the races. If I was going to start something new, community maps always list what they're compatible with and the vast majority of stuff was compatible with GZDoom (and therefore UZDoom) in the first place.

So, it's actually very easy to say how this will affect the community of Doom players. It will barely be a ripple. We'll all download a new source port version, put it wherever/however we have our Doom stuff organized on our systems, and then we will keep ripping and tearing and shooting as we have been for 30 years.

PS: You should go look at the new Sunder map, The Leviathan's Arteries. Just go watch 10 seconds of a video or something and marvel at the best of what Doom mapping is today.