So, I'm writing a piece of software (in Go). Specifically, a domain-specific language (DSL) for making 3D models. (Roughly speaking, what I'm going for is that what I'm building is to Blender as OpenSCAD is to FreeCAD. You write code in a language I'm designing and it uses that code to build and spit out, for instance, 3d game assets with textures, normal maps, rigging, animations, etc.)
I intend to publish it under a FOSS license once it reaches roughly an "alpha" stage. (Once it's actually usable to create generate meshes and export them as files of a couple of different popular 3d file formats.)
I intend at some point to support both interpreting and transpilation of my DSL into Go. As in, you can write code and execute it with something like modelgen run program.mg, or you can transpile it into Go and run it with modelgen transpile program.mg program.go ; go run program.go. (Yes, I get this is pretty ridiculously ambitious, but at least it's good to have a star to set my bearing to.) One potential feature of the transpilation approach is that a game developer could write some code in my DSL for generating models on the fly, transpile it to Go, and then build that Go code directly into the binary of a game they write in Go for purposes of generating models on the fly at runtime. (Based on, say, a list of parameters that the game provides at runtime. "The biome here is cold, so let's generate some humanoid figures with lighter skin to soak up limited light and stockier, stubbier purportions who might appear better able to conserve their body heat. And maybe we generate some wolves with really thick fur that blends into the snowy environment well. Oh, but the biome over there is a hot desert, so let's have some humanoid figures with darker skin to better handle harmful solar radiation.") Making that work properly would also involve building somewhere between "a lot of" and "all of" of my DSL's standard library into their application.
As to the license, first off, I think copyleft is a fucking awesome idea and I want to leverage it to make sure that my DSL is never used to subjugate users or developers, and to promote a cooperative means of development. Given that I have such warm fuzzies for copyleft, my main contenders are: AGPLv3, GPLv3, and LGPLv3.
I've heard Stallman talks in which he indicated that the reason the LGPL was developed in the first place was "strategic", which leads me to believe that less stringent copyleft provisions in service to greater adoption can indeed ultimately serve the cause of increasing users' freedom. (Stallman isn't exactly the most "practical" and "flexible" sort of guy in a lot of regards, so for him to recognize this face makes it seem important.) So I suppose one argument for using the LGPL is to allow other developers to publish software using my project in a way that allows them to keep their code proprietary, even if users who receive a copy of their software still have the right to demand a copy of the source code of all components of my DSL's codebase (including any potential changes/improvements to my DSL's codebase) that might have been included.
Does using the GPL or AGPL, however, mean that if they either statically or dynamically link my code into their program, their whole program becomes a derivative work covered by the (A)GPL? And if so, is that a good thing or a bad thing?
I definitely would love to see a future in which some big/popular game includes a good portion of my AGPL software in the server side of their MMO and players who connect to the official servers are able to demand the source code of the entire server codebase, enabling the game to be modified and improved, and enabling continued playability even after the developer of the game has EOL'd it and shut down official servers. Or if I use the GPL and a game company sells a game with a bunch of my code in it, I'd love for users to discover they have the right to the source code of the whole game and not just the part that is from what I wrote. But honestly, I'm not sure if that's quite how it works.
I guess the main argument to prefer AGPL over GPL is just that it afforts users more freedom and more rights to assert their freedoms than the GPL does. But one major downside I can see is that developers may well see that "A" on the front and completely disregard using my code in their code as an option, making their software entirely proprietary.
Beyond that, I don't want to see any future version of my DSL become proprietary. If some day a very small number of people own the copyright on my code and they conspired to change the license to something proprietary (like, say, Redis did for a while), I think that'd be a bit of a travesty. Which is why I intend for the copyright on contributions from others to be owned by the contributors. A diverse mishmash of different copyright owners for different tiny slivers of the codebase makes it somewhere between "a lot harder" and "impossible" to change the license later. And that's a feature, not a bug. (See also "Ulysses pact".) And if I want to make it harder to change the license in the future, that kindof implies that it behooves me to choose the right license now before it's difficult to change my mind later.
So, I'm hoping some folks here have had the same choice to make at some point in the past, or at least have been involved in such decisions in the past, and might have some insight that might help me choose what's best. I do think probably AGPL would best let me sleep at night, but something like LGPL might well in practice much better preserve the freedoms of downstream users in a more concrete way. I'm not sure!
Thanks in advance for any input whatsoever!



Right? I thought I was in /c/greentext@lemmy.ml for a minute.