3D printing: Open source licenses
Note: I’m not a lawyer. This post is mostly just about my thoughts and all of my interpretations of various software or content licenses might be completely wrong. Also, this text asks a lot’s of questions and brings no answer. You have been warned.
Models for 3D printing and free software licenses
I’m a big fan of hobby 3D printing and I’m a big fan of free software and content. When I code, I release my work under the terms of various free software licenses, mostly ISC (similar to MIT) or GNU GPL. When I create stuff for 3D printing, I want to do the same thing: Make it free, as in freedom.
But applying software licenses to content is not a good idea. For that, we have free content licenses, such as favorite Creative Commons (without NC or ND restrictions). First of all, most “easy” (a.k.a. short) licenses, such as ISC or MIT, speak about software only. I don’t know if I can even legally apply the text about software to something else:
Permission to use, copy, modify, and/or distribute this software...
On the other hand, GNU GPL thinks about other kind of stuff than software:
This License applies to any program or other work...
But even though, the license speaks about source and binary form. Even if the source form is well defined as something that’s meant for easy editing (or something like that), we are still stuck in the world where we have just two forms: form for editing and form for running/using. I will return to that later and you’ll see that in 3D printing, this problem is much more complex.
Creative Commons and other content licenses
So for now on, I could say that Creative Commons is a much better option. An audio track, a photo, even a video or an icon, that’s all content. Therefore 3D model has to be content too. However, I code my models. Wait, huh? Yes, I code them, usually in OpenSCAD. As you might already know, using Creative Commons for source code is not recommended (well, that page speaks about software, but you know what I mean). Let’s say I release my work under the terms of CC BY-SA. Do others have to distribute the code alongside with the 3D model? And do they need to keep it open source? No, they don’t. As long as you are fine with that, there is no trouble. But if you want to keep you work open source, as if you would use GNU GPL, you cannot use Creative Commons. It just doesn’t work.
“Source and binary” form of a 3D model
To explain the problem, I will return to software. When you code a program, it’s usually either compiled or interpreted. Unless it’s kind of both. If we stick with the compiled form, it is possible to distribute sources and/or executables (or binary libraries etc.). Various complex licenses define terms for distributing your app in different forms. For example GNU GPL says: if you distribute binary, you have to include the source.
But when I code my 3D models, it has got much more forms. It can exist in a form of source code. The source code can be compiled/rendered to meshes - either binary or ASCII, that’ts not the point here. But even the mesh is easily editable. You can import it into Blender and do crazy stuff with that. Later, the mesh can be compiled/sliced to G-code, that can be compared to binary form or your app for different architectures (while by architectures I mean different 3D printers). While you usually don’t distribute just G-code for the technical aspect, it’s certainly possible and if you know that other person has the very same printer as you, it’s even useful sometimes. But even the G-code can be somehow editable, but not in very delicious way. And last but not least, you have the printed real 3D object.
So let’s make it an real world example. I create a model in OpenSCAD. Let’s make it simple (and for now ignore the fact that you probably couldn’t license a common shape such as cube anyway):
Then I create a mesh form that code in a form of STL file:
solid OpenSCAD_Model facet normal -1 0 0 outer loop vertex 0 0 1 vertex 0 1 1 vertex 0 0 0 endloop endfacet facet normal -1 0 0 outer loop vertex 0 0 0 vertex 0 1 1 vertex 0 1 0 endloop endfacet facet normal 0 0 1 outer loop vertex 0 0 1 vertex 1 0 1 vertex 1 1 1 endloop endfacet facet normal 0 0 1 outer loop vertex 0 1 1 vertex 0 0 1 vertex 1 1 1 endloop endfacet facet normal 0 -1 0 outer loop vertex 0 0 0 vertex 1 0 0 vertex 1 0 1 endloop endfacet facet normal 0 -1 0 outer loop vertex 0 0 1 vertex 0 0 0 vertex 1 0 1 endloop endfacet facet normal 0 0 -1 outer loop vertex 0 1 0 vertex 1 1 0 vertex 0 0 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 0 0 0 vertex 1 1 0 vertex 1 0 0 endloop endfacet facet normal 0 1 0 outer loop vertex 0 1 1 vertex 1 1 1 vertex 0 1 0 endloop endfacet facet normal 0 1 0 outer loop vertex 0 1 0 vertex 1 1 1 vertex 1 1 0 endloop endfacet facet normal 1 0 0 outer loop vertex 1 0 0 vertex 1 1 0 vertex 1 1 1 endloop endfacet facet normal 1 0 0 outer loop vertex 1 0 1 vertex 1 0 0 vertex 1 1 1 endloop endfacet endsolid OpenSCAD_Model
Then I create a G-code form that:
G21 ; set units to millimeters M107 M104 S200 ; set temperature G28 ; home all axes G1 Z5 F5000 ; lift nozzle M109 S200 ; wait for temperature to be reached G90 ; use absolute coordinates G92 E0 M82 ; use absolute distances for extrusion G1 F1800.000 E-1.00000 G92 E0 G1 Z0.350 F7800.000 G1 X94.790 Y94.790 G1 F1800.000 E1.00000 G1 X95.800 Y93.960 F600.000 E1.04253 G1 X96.950 Y93.350 E1.08489 G1 X98.200 Y92.970 E1.12739 G1 X99.500 Y92.840 E1.16990 G1 X100.500 Y92.840 E1.20243 G1 X101.800 Y92.970 E1.24494 G1 X103.050 Y93.350 E1.28745 G1 X104.200 Y93.960 E1.32980 G1 X105.210 Y94.790 E1.37233 G1 X106.040 Y95.800 E1.41487 G1 X106.650 Y96.950 E1.45722 G1 X107.030 Y98.200 E1.49973 G1 X107.160 Y99.500 E1.54223 G1 X107.160 Y100.500 E1.57477 G1 X107.030 Y101.800 E1.61728 G1 X106.650 Y103.050 E1.65978 G1 X106.040 Y104.200 E1.70214 G1 X105.210 Y105.210 E1.74467 G1 X104.200 Y106.040 E1.78720 G1 X103.050 Y106.650 E1.82956 G1 X101.800 Y107.030 E1.87206 G1 X100.500 Y107.160 E1.91457 G1 X99.500 Y107.160 E1.94710 G1 X98.200 Y107.030 E1.98961 G1 X96.950 Y106.650 E2.03212 G1 X95.800 Y106.040 E2.07447 G1 X94.790 Y105.210 E2.11700 G1 X93.960 Y104.200 E2.15954 G1 X93.350 Y103.050 E2.20189 G1 X92.970 Y101.800 E2.24440 G1 X92.840 Y100.500 E2.28690 G1 X92.840 Y99.500 E2.31944 G1 X92.970 Y98.200 E2.36195 G1 X93.350 Y96.950 E2.40445 G1 X93.960 Y95.800 E2.44681 G1 X94.727 Y94.866 E2.48613 G1 F1800.000 E1.48613 G92 E0 G1 X100.000 Y100.000 F7800.000 G1 F1800.000 E1.00000 G1 X100.000 Y100.000 F1800.000 G1 X100.000 Y100.000 F7800.000 G1 X100.000 Y100.000 F600.000 E1.00000 G1 X100.000 Y100.000 F7800.000 G1 X100.000 Y100.000 F1800.000 M106 S255 G1 F1800.000 E0.00000 G92 E0 G1 Z0.750 F7800.000 G1 X99.875 Y100.125 G1 F1800.000 E1.00000 G1 X100.000 Y100.000 F600.000 E1.00520 G1 X99.875 Y99.875 E1.01040 G1 X100.000 Y100.000 F7800.000 G1 X100.125 Y100.125 F600.000 E1.01559 G1 X100.000 Y100.000 F7800.000 G1 X100.125 Y99.875 F600.000 E1.02079 G1 F1800.000 E0.02079 G92 E0 G1 Z1.150 F7800.000 G1 X99.875 Y100.125 G1 F1800.000 E1.00000 G1 X100.000 Y100.000 F600.000 E1.00520 G1 X99.875 Y99.875 E1.01040 G1 X100.000 Y100.000 F7800.000 G1 X100.125 Y100.125 F600.000 E1.01559 G1 X100.000 Y100.000 F7800.000 G1 X100.125 Y99.875 F600.000 E1.02079 G1 F1800.000 E0.02079 G92 E0 M107 M104 S0 ; turn off temperature G28 X0 ; home X axis M84 ; disable motors
And I print the cube, finally.
Let’s say I’ve released the cube under a software license, such as GPL. Now what is the source and what is not? What if Bob prints it and sells it to Anne, does he need to give her the G-code as well? Or STL file? Or even the OpenSCAD source? Does Bob needs to 2D print GNU GPL’s text and distribute it together with the printed cube?
And that was simple. What if there’s a bunch of machine parts for a 3D printer released under GNU GPL and I take just one part of it and I use it in my own printer’s design. Is it derivative work and do I need to release my own printer’s design as GNU GPL? Does that mean I have to distribute all source code of my printer design together with it? Does that mean STL, G-code or OpenSCAD source? What if I don’t use OpenSCAD?
That could be solved by LGPL. Or not. How do I dynamically link a 3D printed object to another one?
I had an idea, that maybe an Open Hardware license could be useful, but that usually speaks just about documentation and therefor is not usable.
How to solve that?
When I create a 3D model for 3D printing I would like to have a license that satisfy my needs. For most of the cases, that’s CC BY-SA for me, as it works like MIT in software. However, I could imagine a situation, where I want to force keep the openness of the code. Of the very first OpenSCAD code. And once I put myself in that situation, I’ll be screwed.
blog comments powered by Disqus