I’m fan of free software, I’m also a Micro-electronic engineer, sometimes I wish I could apply the free software philosophy to some hardware projects.
Well I could just applying some nice licence to some design and publish it. For hacking this works, just look at Arduino‘s success !
And there are plenty of other examples :
- Here is a list published end 2008 by makezine.com: Open source hardware 2008 – The definitive guide to open source hardware projects in 2008
- I also like the adafruit.com and ladyada.net approach. One site is commercial and selling the open source projects described on the other.
I think one great part of the success is related to the fact that you can do it yourself.
Now if you consider bigger projects like FPGA/ASIC design, it seams harder, well yes you loose the ‘do-it-yourself’ fun, and you compete with big companies, but still there are some examples:
Ok this is possible, now let’s go further, how do I choose my licence ?
First the firmware is software, so using regular software licence is a must. (Don’t even think of writing a new one !)
Mainly BSD or GPL are your choice of philosophy, just have a look at OSI for more approved licenses.
This choice will impact the licence you will use for your hardware as well. I mean why would it be a different philosophy ?
Personally I’ll choose GPL for most of my projects.
Before going further let’s see what other are doing. First wikipedia’s article on Open-source hardware is mainly focusing on licence, so reading it will help.
Then ladyada.net have a section about what “open hardware” could mean, this particular page is about license and highlight the “non-commercial” licence issue. Also there is a good collection of link on the project page, don’t miss it !
The three first links on opencollector.org’s Open Source Hardware page are also really helpful.
At time of writing opencores.org is down for maintenance, but if I remember well they push for LGPL.
For Schematics, diagrams, images and documentation, either use the same software licence or look at creative commons‘s licence. But remember, non-commercial is not free so CC-BY or CC-BY-SA are your options.
For the RTL code it might get complicated. First the FPGA RTL, I tent to think of it like a firmware, so if it will only ever be used for FPGAs, then why not just use a software licence.
Next is an ASIC intended RTL code, and here I’m really not sure, because it cost so much that you’ll have to convince someone to pay for it, and this someone will need some return on investment so you need to keep some guaranty.
The Open Graphics Project solves this by asking everything to be double licenced GPL and to their associated company.
I don’t have an answer yet, but I tend to think that the RTL is not a complete definition of the ASIC. The synthesis is quite automatic however you need to define your clock domains, design your power domains, etc. The layout, is still far form being fully automated. And last but not least, you need some production tests. Well, all this is mostly automated, but it’s still can make a difference between different chip.
So maybe the ASIC specific RTL can keep a different licence to please an investor while the blocks are common with the FPGA design can just use a regular open source licence.
I’m also not sure on how to mix several blocks with different licences in the same chip. I guess the ASIC Cell library you use, can be considered like ‘system library’ with regards to the GPL. But what about some analog blocks ? Or building a chip using some open source hardware modules and some proprietary ones (for patent or other limitation that would not allow some parts to be free.). Of course in my mind the interface of such proprietary block must be available to allow hardware and software integration (like writing the drivers…)
To conclude, before investing time on a large project I’ll have to find a decent licence first.
If you were looking for a definition, there is a work in progress at freedomdefined.org: It look a lot like debian’s dfsg but for hardware: Open Source Hardware (OSHW) Draft Definition version 0.3.