15 September 2016 / Last updated: 27 Jan 2017

Presenting Etcher on Software Freedom Day

Execution time:
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.
Software Freedom Day
This year Gandi is organizing a Software Freedom Day gathering here in Taiwan.
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 Beta 14
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.
Etcher animation
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!
If this sounds interesting for you, join us on Gitter to talk about Etcher, or contribute code on Github (here's a contributor guide to get started)! And if you are free this Saturday, September 17, find a Software Freedom Day event near you!

Share this post