License updates to complexpbr, Arena FPS Sample Program, and my personal fork of the Panda3D engine

There’s something in the game dev air and it’s the proliferation of generative AI. This seems to be an increasingly unavoidable topic.

I’ve taken the step of relicensing complexpbr, my arena shooter sample program, and my personal fork of the Panda3D engine. All three of these projects are now licensed under the 3-Clause BSD NON-AI License which is just the normal modified BSD-3 clause license with a no-AI amendment. Technically speaking all my repositories are marked on the GitHub backend as “no AI training” so this has, to an extent, already been the case for some time.

I’ll detail just a bit about my personal fork of the engine itself. I mainly worked on it from Sep 29, 2023 to Nov 15, 2023 where I removed somewhere in the vicinity of half a million lines of code in an effort to make the engine even more minimal. I stripped the engine down to its essential components; I even tried to remove pstats, but found it was too innervated in the code base to realistically remove in a sane amount of time.

I am admittedly a minimalist, and I prefer programs to be more like a set of formal definitions than pieces of artwork or something. I don’t get a whole lot of PRs to my work, but I will say that I will not be accepting any AI generated contributions to my projects. This is a hard line, but worthwhile I believe, even if these 3 repositories stay the same from this day on. And my repositories can be good choices for those of you who for whatever reasons wish to stay away from generative AI technologies in your game development workflow. For those that do wish to use generative AI in their workflows, I suppose we’ll see where that leads.

Naturally if you choose to use my fork of the engine, you will lose out on all the contributions and updates made to the upstream branch since September 29th, 2023 which there are many. I have done a small amount of work to my downstream branch since, like my fix for the X11 IME refs in Issue 1478 in Commit f89fa8b

I would recommend everybody keep using the official, upstream branch of Panda3D. It’s great.

I host and maintain these other projects because they’re useful and interesting to me, but also for a subtler reason: I’ve wanted to provide a set of tools to the world that I myself wish I had had when I was younger.

And naturally I’m curious what other minds out there wish to see realized themselves, visually and interactively. What I’m not interested in seeing is the gift of computational capacity squandered, or made very morally questionable. To the extent that I can continue supporting these general goals, I will do so.

I suppose, with a flair, I observe that game dev is indeed still quite deep and quite relevant as these wider technological changes continue impacting our field so dramatically. I’ll refrain from writing a philosophical essay here. If anybody has any questions let me know here.

3 Likes

Well, I seem to have stirred things up with my AI post. :slight_smile:

I’m not sure if you realize it, but can you see that claiming that using Gen AI is “morally questionable” is really pretty offensive to those of us who use AI every day in their dev work?

It just seems like “no AI” has become a fundamentalist religion on this sub at least in a flurry of recent posts.

Tolerance is a good thing.

Reality is there are very few professional devs who don’t use generative AI, it’s pretty ubiquitous now.

If you choose not to use AI, that is a perfectly valid artistic choice.

But the insinuation that it makes you morally superior is honestly not cool.

Thanks for your work on complexPBR back in the day, I do think it was a project that had great potential.

Hi, first of all thanks for all the open source work.

I’ve taken the step of relicensing complexpbr, my arena shooter sample program,

I hope you have no hard feelings with my recent fork of your arena shooter as a base where I drove fable to experimentally port Cube 2 fork to panda using genai assistance. It proved as excellent testing ground for my engine RmlUI and Enet integrations.

and my personal fork of the Panda3D engine.

IANAL but Deleting Copyright (c) 2008, Carnegie Mellon University. and replacing it entirely with Copyright (c) 2026, [author]. is a direct violation of the original BSD license terms.

All three of these projects are now licensed under the 3-Clause BSD NON-AI License which is just the normal modified BSD-3 clause license with a no-AI amendment

Adding Clause 4 (“…may not be used for the purpose of training or improving machine learning algorithms…”) introduces a use restriction, so this is violation of the Open Source Definition (OSD); OSI explicitly prohibits restrictions against specific fields of endeavor. Furthermore calling a restrictive, custom license a “3-Clause BSD NON-AI License” while keeping 4 clauses is misleading. I think this is now no longer considered Open Source but instead proprietary source-available license?

I am admittedly a minimalist, and I prefer programs to be more like a set of formal definitions than pieces of artwork or something. […] And my repositories can be good choices for those of you who for whatever reasons wish to stay away from generative AI technologies in your game development workflow.

I respect this and think projects governed in such way are very important to have for diversity. However I wonder, wouldn’t CLA work better than restrictive license, if this is only about gating contributions, and not dictating how your projects are used downstream?

Also where do you draw the practical line for contributions? For instance, how do you approach developer tools that incorporate AI implicitly (like deterministic IDE auto-completes or spell-checkers or even FIM) versus explicit code generation?

1 Like

Thanks for pointing this out. How do you suggest I remedy this? I’ve already included the upstream repo link in the GitHub repo description, so I’m not trying to pretend this doesn’t directly descend from Panda3D.

Yeah. Well, I don’t believe that GitHub itself includes a standard 3-Clause-type non-gen-AI license as standard, which is why I took the existing form from GitHub - non-ai-licenses/non-ai-licenses: This repository contains software licenses that restrict software from being used in AI training datasets or AI technologies. · GitHub because I didn’t want to write a brand new license from scratch. But I guess these are unprecedented times.

I suppose I’ll follow what Godot has recently been doing, stating use cases and saying “not that”. This situation obviously calls for writing a brand-new license.

1 Like

I’ve added the original license as a .txt file in my fork repo, and referenced it in the project LICENSE thusly:

(For the original Panda3D BSD-3 license, see the included original_Panda3D_license.txt 
or https://github.com/panda3d/panda3d for license reference.)
2 Likes

I don’t believe that GitHub itself includes a standard 3-Clause-type non-gen-AI license

Github only offers open source licenses, your license is not open source.

which is why I took the existing form from GitHub - non-ai-licenses/non-ai-licenses

that repo is a mess (MPL violation, unlicense nonsense)…

IANAL, but as far as I can see, you have the right to distribute your derivative work under a license with additional terms. However, as the license states, you must retain the original copyright and license notice. The part where you are (as of the latest commit) still legally in the wrong is that your name is implied to be the copyright owner of the Panda3D code. All license headers are pointing to the LICENSE file, which contains (c) your name and your modified terms. If you wish to remedy this, you should clearly separate the original work, which remains copyrighted by Carnegie Mellon University and constitutes the bulk of the code in the repository, from your own modifications. Your own copyright notice must remain clearly scoped to your modifications.

On a more personal note, I would encourage people to report issues and contribute any fixes upstream rather than keep them in a separate fork, so that it can be useful for the community at large.

1 Like

Thanks for pointing that out. I’ve changed the “main” LICENSE file back to the original, and added my own new_license.txt in the repo itself which references a commit’s full SHA to differentiate where I made significant changes to the engine in the fork.

(This license applies to all code and structural changes, where permitted, since commit e086a5a0d69560fea5b2a1b7eed34669fc2566db)

I realize that these licensing changes are works in progress, and I’m open to any other suggestions. I’ll also keep an eye out for more “official” licenses that may appear in the future.

1 Like

I’m glad to hear that the arena sample program was useful to you. I believe that the use cases with the new license shouldn’t restrict anybody too much – it’s mostly about not using the source to train generative AI systems. So unless you plan to allow your code which includes my source to be used in training, there’s no problem. I can see how that might feel more restrictive, though.

1 Like

OK, say it works perfectly. Not one line of complexpbr ever enters a training set. What have you won?

The costs are concrete. Non-OSI, so no distro packaging. GPL-incompatible. And as to the fork specifically, you said the work was mostly deleting half a million lines, which produces very little copyrightable expression, so I’m not sure clause 4 has much to attach to.

Those costs fall on people trying to use your code. The benefit is that a small amount of niche shader work stays out of a dataset it was never going to meaningfully shape.

So Anthropic isn’t going to be training Mythos v2 on the new code you added to your fork. But in a hypothetical world where they did, all you have achieved is to make coding with complexpbr a bit harder for future users.

I’m not trying to “win” anything. I’ve clearly stated my goals in the first post.

That was never a goal for complexpbr.

I’m not an expert on GPL-compatibility in this specific case. However, I have included an engine, a rendering frontend, and an advanced sample program which are compatible together. The rest can, and should, be Python code by intent.

Actually, software copyright protects the specific expression of code, including the structure and organization, to my understanding.

I think this undersells rather a lot the value in keeping this collection of work out of very new, legally experimental areas like vibe coding. Actually, I’m happy to do this, because it provides exactly that niche alternative for those who (for whatever reason) want to build their programs in an explicitly generative AI free toolset. Personally speaking, I don’t even use an IDE, I use text editors. This includes when I work on my panda3d source fork.

I mean, are they really “coding with complexpbr” if they’re not writing any code?

Lots of developers don’t write much code these days, the abstraction layer has changed. Around August last year, Claude Code got good enough that it was pretty decent at taking the lead, and with the release of Fable human manual coding is much less necessary - and not necessary at all if you’re working with Panda3D.

I haven’t open my IDE in a year.

It’s still software development, just a different technique. Also, I personally find it a lot more fun!

Thanks for making the corrections, I appreciate that. I don’t see any remaining legal issues, though IANAL (as usual).

To not let this go unclarified: it is GPL-incompatible because the GPL requires a combined work to be distributable under the GPL’s terms, and by adding a term restricting your code based on field of endeavour, it becomes impossible to satisfy both licenses. It’s by the same mechanism that your libraries are now no longer free nor open-source, as @frainfreeze pointed out already; being open-source, to put it simply, requires that you accept that people (and companies) you don’t like receive the same rights as everyone else. Practically, that means that (1) someone can’t license their own code under the GPL and distribute the resulting work if it uses your libraries, but (2) also means they can’t use any other libraries in the same application if they happen to be GPL.

With that cost in mind, it is also worth considering whether your license is effective; AI companies have argued that their scraping falls under fair use, so they may hold the view that your license terms do not apply to them, though IANAL and it’s possible this may vary by jurisdiction.

Don’t construe this as criticism or an attempt to change your mind; I am an avid believer in FOSS and as such I will defend anyone’s right to distribute a proprietary fork of Panda3D (a source-available one all the better), and I respect that you are making a stand on an issue that is important to you. But I thought it was worth it to make you aware of the tradeoffs.

1 Like

The AI companies clearly have no problem violating copyright laws. I think that hosting source on github is like free offering to them. Don’t you think so?

1 Like

Yes, unfortunately, that is true now.

I’m not sure exactly what you’re claiming here, but I believe it may be overstated. “If they happen to be GPL” is the key phrase, but many Python packages are imported into proprietary projects as a matter of course. Using my engine/renderer/demo stack would not prevent somebody from importing numpy (or any other permissively licensed Python module).

This is, as you have said, speculative and not law. Personally I don’t see how an explicitly worded license like the one I’m now using could be interpreted to allow the wholesale training use case under any interpretation.

This is a bifurcation point that I never wanted to see happen, but given that I’ve been involved in AI to some degree since waaaayyy before it became popular, I’ve known for a long time this situation might come to pass.

In my eyes true FOSS is somewhat utopian, and something I want to wholeheartedly support. But as I see it, without preexisting guarantees for flesh and blood people that limit their risk (and I mean existential risk) we need to protect these commons to a greater extent. That has become clear to me (and others) in the last year.

1 Like

Thanks, that makes your position clearer.

If you wish to effectively ban LLM use on your repository, I might suggest that you create an AGENTS.md file, which I think most LLM-based coding tools will read, and insert instructions to the effect that the LLM should not continue and refuse further work.

1 Like

Hello. For the record, I am supportive of your overall decision in this. I’m not very good at coding yet, but what I do write, I write myself.

I am really unfamiliar with the intricacies of licensing beyond the major differences of copyleft vs copyright and closed source versus open source. Does this license mean that, if for instance I wanted to use your ComplexPBR in a project, I would need to use it on the same license version of Panda3D? Or could I use ComplexPBR in a project made in the standard ‘official’ version of Panda that is being maintained largely by rdb?

2 Likes

Thanks for the questions, it’s important to clarify how this changes things for complexpbr users.

You can still use the pip install of complexpbr as usual, including with the upstream Panda3D engine.

What is potentially different is if you bundle/package complexpbr into your own application and distribute or sell it. Generally you’d include some language in your EULA to express the use limitations of complexpbr (and any other proprietary technology you’ve bundled).

May I also suggest not hosting it on LinkedIn-For-LLMs, I mean Github, but some sane place like Codeberg? Relatedly, how are you going to build the cross-platform wheels, or is the idea that users compile them ourselves?

Yeah, I have been considering GitHub alternatives. I’m not sure any would really improve the situation – as far as I understand, GitHub is on the hook for not allowing scraping on accounts/repos that explicitly toggle that off on the backend. That might only apply to Microsoft’s usage personally. Practically speaking yes I am considering alternatives.

I could indeed host wheels for my fork of the engine. But I don’t want to confuse existing users of the upstream engine, or create a negative sentiment as all these issues are still being discussed. I suppose I might want to call it something unique to differentiate it.