Software Freedom Day is an annual celebration of Free Software, a tradition started in 2004. Since then, every year people gather at events around the world, to discuss and learn about free software, free defined as in freedom.
Etcher is a cross-platform SD card and USB drive flashing program, created here at resin.io, based on our experience of working with a lot of SD cards, a lot of platforms, and a lot of pain...
Etcher is currently at its 1.0.0-beta.14
release, and the first, proper, full 1.0.0
release is nearing (the next few weeks hopefully), I thought it would be a great opportunity to present Etcher to a larger audience!
Etcher as Free Software
We wouldn't have Etcher any other way but as open source software. It is available at
resin-io/etcher on Github, check it out if you are interested! There are a number of aspects, though, that makes Etcher a great example of "free software", mainly
being built on widely used foundations and the way it
enables others to build on top of it as well.
It is written in Javascript/
Node.js, and all modules used are all easily accessible through
NPM. Its cross-platform functionality is provided by
ElectronJS, and building on a successful and popular project like that enables people to figure out the behaviour of the project much easier, than if we were to roll our own cross-platform solution. Whether it is to verify its workings or to contribute to the project, it's much easier to start if many people are familiar with the framework used.
The components used in creating the whole image writing experience are all modularized, and make it easy to reuse them in other projects. For example,
- etcher-image-write provides the writing capabilities,
- etcher-image-stream creates a stream from any OS image (including compressed images, zip, xz, bz2, and so on).
- drivelist, which lists all connected drives in your computer, in all major operating systems, without requiring root.
- There are other modules that reimplemented some existing tools to be reusable across projects, such as bmapflash, which adds a Node.js bmap implementation, allowing faster flashing time for specially prepared OS images.
Reusability is not just a theoretical probability, the excellent
PiBakery tool borrows some of those modules for similar work, and then it can focus on creating a unique experience. Just as we hoped people would do! I'm sure that Etcher's included documentation of its
architecture facilitates all this work.
We also have ceated a couple of tools while working on Etcher to make our own job easier, such as
versionist, a flexible
CHANGELOG
generation toolkit, that we are now using across a number of projects within resin.io.
For a not programming related effect, we see a lot of technology and projects that rely on burning SD cards with OS images, such as
Raspberry Pi. Traditionally it required quite a bit of work to document how image flashing works across all platforms. We hope that Etcher will free them from that work by providing a consistent and simple tool across, and they can concentrate on their core functions and experience instead!