Desktop manufacturing tools like 3-D printers have spawned a new community of amateur makers who'd like to build upon each other's ideas. But, co-creating actual stuff is harder than it sounds. Why? Unlike open software, which has popular collaborative tools like Git (and websites built on it, like GitHub), Subversion, and Mercurial, hardware has no system for version control.
Sure, it's easy to post your design online, even slapping a Creative Commons or GPL share-and-share-alike license on it. But you'll quickly find that's not enough. I learned this lesson the hard way about five years ago when I first started making and posting projects. Maybe people will use your files, but they won't improve them. Or if they do, they won't share them in the same place you did, so no real community can form around the idea.
A version control system is basically a database that tracks contributions to a project. Think of it as using Word with “track changes” on, but rather than displaying all the changes on one document, you can see them as an editable list. This allows both parties to easily see the project, "merge" improvements, double-check changes, and “revert” it if it's not working.
>Until your project is in a public version-control system, it's open source in name only. Odds are, nobody will help you build it.
The main difference between successful open source projects and unsuccessful ones is that the successful ones took the trouble to use a good version control system, including the documentation and collaboration work necessary to make it easy for others to contribute.
Basically, until your project is in a public version-control system, it's open source in name only. Odds are, nobody will help you build it.
For software, version control is pretty easy, since you can simply show the “diffs” between two files as highlighted text. But how do you do that for hardware, where the files tend to be in binary formats, which are often proprietary?
How do you show the differences in CAD program files, especially if they were done with different authoring software? How about printed circuit board (PCB) designs? Even electronic schematics combine graphics with metadata. That makes comparisons between files fiendishly hard.
Here's an example, from EvilMadScientist (an open hardware company) that both proves the need for version control and offers one possible solution.
It uses the case of a schematic diagram for an electrical circuit -- the sort of design that may have been originally created in a PCB design tool such as Cadsoft's Eagle software.
Original Schematic:
Modified schematic:
Can you see the difference? Probably not. But with a fancy bit of software that highlights changes in graphic files, you can highlight them to make them pop out:
What happened here? A jumper wire was deleted, and a resistor and LED were added. A power supply connection point was also moved and the author added a revision note without affecting the circuit electrically.
The EvilMadScientist crew had the native authoring program export a PDF, converted the PDF to PNG format, and then used a free utility to compare the PNGs.
Even electronic schematics combine graphics with metadata. That makes comparisons between files fiendishly hard.This is a hassle to do manually, but is very easy to automate. Almost all CAD and electronics design tools can export PDFs, and although most of the metadata is lost in that process, it's at least a start in establishing a standard for “visual diffs”.
(Fujitsu has some new research that would offer a more advanced way of actually comparing native CAD files. Read more about that here. )
This is pointing us toward the next step, a GitHub for stuff. If open source hardware is going to take off like open source software, we need this.
Ideally, such a site would have:
- The ability to share many CAD and other design files, with the backend software to read them and generate preview images and visual diffs.
- The ability to retain the design metadata in these files. That includes material specifications and “parametric” dimension values that can be changed.
- The ability to merge, revert, and otherwise manage contributions
Professional design, engineering, and architecture companies filled this need long ago with software that has its own workflow tools, like Autodesk's AutoCAD and Solidworks. But such tools cost tens of thousands of dollars, and only work within that software.
Likewise, Hollywood production companies and videogame studios, which use a lot of 3D design files, typically have private custom collaboration software on their internal networks, with huge databases of objects and the ability to check in/check out changes.
Instead of such expensive and closed commercial systems, we need open Web-based repositories for design files, filling the role that GitHub, Sourceforge, and Google Code have for software. (You can already use the existing code repositories for design files. And some, like GitHub, already have good ways of comparing images. But none of them were designed for CAD or PCB design, so you can't understand the contents of the files and manage them the way you'd manage text.)
Fortunately, there are a number of teams already working on this. Let's see how they're doing.
Thingiverse:
A spin-off of the Makerbot crew, Thingiverse is a repository of CAD designs -- mostly objects that can be 3D printed. You can upload a STL file (the lowest common denominator of CAD files) and it will create an image file that people can see.
Thingiverse recently added the ability to link derivative designs (modifications made by other people) to the original. That will help build community, but it's a long way from a proper version control system. There's no way to easily see the differences between the designs, see intermediate versions, or work with the original design files, which have all the metadata that allows for easy modifications.
A smart newcomer on the scene, Sunglass.io was designed from the start for social collaboration around 3D object files. It supports many of the major formats (STL, OBJ, 3DS, PLA, PLY), and has a really slick viewer app that you can embed on other websites to let people examine your design from various angles.
Although it doesn't retain metadata from the original CAD files, you can place notes and other annotations on the files, which describe the changes. Plus, you can mail 2D snapshots of the files to collaborators -- an easy way to visualize changes. The company plans to launch the site officially at the end of May. For now you can request an invitation to try it out.
Open Design Engine:
This was a successful Kickstarter project (full disclosure: I was one of the backers) that articulated the need well:
Unfortunately, not much has happened since the project got funded last October. The site is still under construction and in closed alpha testing, with little sign of active development. It also doesn't appear to be planning any method for visual diffs.
Whether or not Open Design Engine comes to pass, it articulated the need for such a site well. Until we have a collaborative system for making stuff, we'll all be creators adrift, with no central port to trade our ideas.