Welcome back, folks, to our third installment of my Six Degrees column. Thanks for the wondrous support over the past two installments. As always, keep your feedback flowing in the comments and feel free to drop me an email if you have topics you would like me to delve into.
For this month's column, I want to dig into what I consider to be an important topic: how open source can provide the guardrails for a new generation of innovators.
Buzzwords, much? Maybe. But stick with me, people...
When I was, young, stupid, and had a peanut for a brain, I got into computers. I felt remarkably lucky that my parents got me a Commodore 64, and with it I played games and learned how to program in BASIC. As my interest in computing grew I eventually got an ancient PC and started learning C, later getting into Linux and open source.
From an early age I was fascinated by gadgets and computers, but as a teenager with no money, I could never afford to buy new hardware. Software was a different beast: it was free, and when it changed, I could get the new stuff for free too. As such, I basically turned into a software dork, not just because I loved software, but because it was all I had access to.
Now fast forward to 2015. The hair is gone and I have a 2-year-old son named Jack. Like most parents, I think about what opportunities he will have to explore his creativity and interests, and compared to my formative years, it is going to be a whole different deal entirely.
When Jack is the same age I was, he will have a wealth of technology at his fingertips. He will be able to use and create open source as we can today, but he will also have access to an abundance of APIs for always-on web services. He will be able to command an unlimited amount of computing power with the cloud (making things such as artificial intelligence, big data, and machine learning more accessible). He will have access to powerful lost-cost computing and hundreds of different sensors. He will be able to download, create, and 3D print items in a range of different materials. He will have access to robotics, virtual reality, augmented reality, and computer vision.
To learn and explore this range of technologies, he will have a library of hundreds of millions of videos, books, articles, tutorials, and more—all available online. He will be exposed to an ubiquity of education, support, and data, and he will be able to fund his ideas with crowdfunding and crowd equity.
Put simply, while I felt empowered by the availability of the Internet and open source, Jack will be empowered by an abundant supply of tools—not just software, but everything needed to build entire products, businesses, and networks. He'll be able to get his creations into the hands of others more easily.
This not only paves the way for incredible innovation, but allows the culture of making to start earlier and earlier. We can already see signs of this today in people like Jack Andraka, who at the age of 15 created a test that detected early stages of lung, ovarian, and pancreatic cancer. He primarily figured out how to do this with rudimentary tools and extensive research using Google. Even our neighbor's 6-year-old is taking part, building robots with Lego Mindstorms.
A new world
In this brave new world of heterogeneous projects that combine hardware, software, printed, cloud, and other pieces, we are going to see an cacophony of different tools for building these different parts of an idea and project. We have GitHub for collaborating around code, Thingiverse for 3D models, Trello for project management and coordination, Moqups and Balsamiq for user interface design, specific toolkits for building drivers and integrating with sensors, and more.
While each of these tools have their own communities, things could get interesting in how they collaborate around these heterogeneous projects that include different types of content, be it software, hardware designs, cloud workloads, or something more.
For example, imagine I want to build a drone. I would create and use open hardware, 3D print the frame, use off-the-shelf electronics, power it with open source, and have some other pieces in there too.
Ideally I would want to build a community in which coders, hardware hackers, aviation scientists, and others could all come and help refine and improve the drone.
This begs the question, could I build a community to create a product in the same way I can create an open source community to build software?
If we can figure out how to do this, the opportunities could be enormous.
As many of us have learned from open source, coding is fun, but social coding is way more fun and rewarding. Today there are lots of individuals making things themselves in their garages, but just think how empowering it could be to collaborate with others across the world to build drones, cars, gadgets, watches, or anything else. It would effectively take the spirit of open source and explode it out beyond software.
Imagine the notion of open products; projects that you can download in the form of a single set of blueprints that you can send to your 3D printer, to your hardware, to your compiler, and physical blueprints that you can use to assemble the product. In these blueprints everything would be entirely open: if you can see it, you can hack on it.
Imagine each of these open products has a community that you can join just like an open source community where you can fork these blueprints, experiment, and then contribute your improvements and fixes.
In the same way open source has spawned millions of careers and thousands of companies, imagine the opportunity with openness applied to products. It could potentially jumpstart a revolution in how we conceptualize, build, and share things and how we experiment and innovate to push the boundaries of science and technology.
Open source inspiration
Now, collaborating in a heterogeneous project is not going to be simple—there are lots of challenges. How do you bundle together software, hardware designs, and other material in a way that makes it simple to collaborate and distribute? What open standards do we need to ensure ubiquitous access? How do we apply the same principles of distributed software development to hardware and other areas? How do we bridge the quite different cultures of software and hardware hacking?
I have long believed that open source is where society innovates. When we can build technology together, we can explore, experiment, and do great things. This is why open source runs the infrastructure of the world and many of the devices in our homes and pockets.
Part of the reason why open source works is that we figured out how to work together effectively to improve and refine technology. We often talk about community in the open source world but I think we often forget, or don't realize, just how weird our communities are.
We are all familiar with the common pieces in most open source communities: revision control systems, bug trackers, Wikis, mailing lists, regular release planning, meetings, etc. Most other communities in the world, such as local book clubs, fan sites, conventions, gaming communities, and more, simply don't collaborate in any way like we do.
We have carved out a way of working together that is truly unique.
As such, I believe open source as applied to software can be a great starting point for how we figure out how to build communities for these heterogeneous projects. We will need to face some technical and social challenges, but we have this opportunity for open source to inspire an entirely new generation and to build some incredible things.
So how do we do this?
Well, naturally I don't have all the answers, but I think there are some clear starting points.
Firstly, we will need to create a premise of a blueprint bundle. In much the same way I can download a branch from Git or a tarball with some code, complete with build system, we will want to be able to download a single branch or tarball with the full software, hardware designs, and more for how to create an open product.
Secondly, we will need to identify where we need open standards. As an example, when I download this blueprint, ideally I want to ensure that as many people can build the thing as possible. How can we print on multiple different 3D printers? How do we ensure that we can try and experiment with different hardware components (e.g. trying different motors in the same sized 3D printed frame)? As we automate manufacturing more and more, how do we ensure that our blueprints work across new manufacturing processes?
Thirdly, we will need to figure out how we collaborate and improve different pieces of these projects. For example, if someone refines a 3D printed piece of a drone, how do they fork the blueprints, submit their changes, have them reviewed, and get them merged into the project? Another question could relate to automated testing: when building physical products we can't always afford to build and test new physical hardware for it to then crash and burn, so how can we have unit tests for hardware or test in a virtual setting? What kind of measurements and metrics can we get out of this testing to share with the wider community to inspire further discussion to refine the project?
Finally, we will want to encourage a culture of open development and education. This is very prevalent in open source, but in some hardware worlds openness is less common. We will want to share and distribute knowledge for how people can get involved in these communities as well as encouraging more open product communities to form and do interesting work.
I believe open source gives us a firm foundation of the core social tenets of how we collaborate: shared formats, open standards, methods of contributing and reviewing material, and discussing and planning work. If we take these core principles and evolve them with this new heterogeneous world, we could truly unlock potential across the world.
As with all of my columns, this is just the start of the conversation. Enough from me, I want to hear your thoughts. How do you believe we could create a world in which we can build products and inventions as openly and as engaging as open source software projects? I look forward to see your thoughts.
This article is part of Jono Bacon's Six Degrees column, where he shares his thoughts and perspectives on culture, communities, and trends in open source.