Tales of software craftsmanship

Tales of software craftsmanship

Sometimes you need to reinvent the wheel

On behalf of the Calamares team and Blue Systems, I am proud to announce the immediate availability of Calamares 1.0.

Calamares is a distribution independent installer framework. I had the initial idea for Calamares in May 2014, less than a year ago, and out of frustration: many successful independent Linux distributions came with lackluster installers, and all of these installers were a result of competition rather than cooperation. Improving one of the existing installers wouldn’t have fixed this, as every installer was more or less distribution specific. I wanted to create a product that would satisfy the requirements of most Linux distributions, developed as an upstream project for all of them.

Everything went better than expected.

With support from Blue Systems and some help from Aurélien Gâteau I started from scratch around June 2014, with a highly modular design and some valuable contributions from KaOS, Manjaro, Maui and Netrunner developers. Contributors from Fedora, BBQLinux, OpenMandriva and the KDE Visual Design Group joined in afterwards. Now, a little over half a year of design and development frenzy later, we choose to call it 1.0. While there is still room for improvement, we have decided that the first development iteration is done, and we are presenting a modest yet feature-complete product.

Calamares is built with Qt 5, C++11, Boost.Python, (bits of) KDE Frameworks 5 and KDE Partition Manager.

Feature highlights include:

  • a completely modular design, with three plugin interfaces: C++, Python and generic process;
  • a threaded job executor, with C++ and Python API;
  • a collection of over 25 modules, ranging from boot loader support to partitioning, to user management and much more, with the opportunity of deploying your own;
  • a self-contained branding component mechanism, which allows distributions to ship a consistent user experience without patching;
  • an advanced partitioning tool, with automation and resize functionality and both DOS and GPT partition table support.

The Calamares team hangs out in #calamares on Freenode, feel free to drop by.

Bugs should be reported to our issue tracker, and pull requests go to GitHub.


  • Reply Baconmon |

    This is some thing I never would have thought of my self, but once I read about it I realized that yeah, we definitely need this.. This is some thing that the linux ecosystem very much needs.. I hope it will work with Debian..
    Any way, thank you for making some thing this awesome.. I hope it keeps improving and makes linux installation flawless for any type of person that decides they want to install linux..

  • Reply Enzzo |

    Looks cool.
    Does it have command line interface? (non-interactive)?
    The possibility of pass all settings via arguments will be very usefull for a consistent install on labs.

    • Reply Teo |

      No, interactive with Qt gui is the only way right now. Keep in mind the product is little over half a year old, so I had to do some tough choices when prioritizing our milestones in order to have a usable release as soon as possible. However, key portions of Calamares are even written with no QtGui dependency, with a non-interactive mode in mind as a future goal.

  • Reply Pan Smrcek |

    Great work! I like it when people, instead of forking, join together and create something that can be used by many. LXQt, Calamares you are my heroes!

  • Reply Kevin Funk |


    thinking about it, it definitely made sense to work in this. Let’s share as much as possible across all the distributions out there (I’d personally like to see the number of distributions to shrink instead …, but this won’t ever happen I’m afraid).

    Great job!

    • Reply Teo |

      Thank you.
      It is reasonable to meet a claim like “I’ll rewrite X, but better” with skepticism. Actually any claim of any kind should be examined with skepticism 🙂
      I think there were (and still are) good technical reasons for starting from scratch with Calamares, and I’m glad we have been able to deliver some tangible value over existing solutions, while also taking advantage of the best bits of those solutions (some Calamares Python modules are ported from other installers).

  • Reply Oh |

    So we must have qt5 and kde5,
    mean it only can use belong morden desktop linux distribution.
    Anaconda also provide a text installer for server linux distribution.

    • Reply Teo |

      As I explained above, Calamares is little over half a year old, so I had to pick some priorities. In fact, I would agree with you in recommending Anaconda or some other installer if you need a text-based install procedure.
      “However, key portions of Calamares are even written with no QtGui dependency, with a non-interactive mode in mind as a future goal.”

  • Reply eliasp |

    When I started reading the article, my first thought was “oh no, not another ‘universal package format to replace all existing package managers’!”.

    Then I continued reading and my refusal turned into excitement when I realized what it is about 🙂
    This is exactly the right thing to do! Thanks a lot for starting this project and keep rocking!

  • Reply STiAT |

    Great work there! Though, I noticed one very strange behavior of the partitioner.

    I’ve a GPT partition with an existing distro, if I chose to format the disks and/or recreate all disks (same thing on “use entire disk” and formatting the disk on my own, does not make a difference if I choose to create a new PT or not), the installer failed and only created the first disk. After I reboot and use the first disk + create all others, everything works properly. I don’t even get a proper error message or anything like that, just “failed” without a reason. Seems as if the sd* devices are not created in /dev and then it fails for some reason on sdX2.

    I’ve been following the work for some time now, and I’m excited to see that there is a release now you consider feature complete and “stable” enough to release. As a former Tribe maintainer, I see Calamares as a great thing, especially for providing smaller distributions with a installer who don’t have to waste resources writing their own and/or adopting complicated “native” distro installers as ubiquity (ok, ubiquity is pretty easy), or the debian / fedora installers. A great thing is the modular design you chose, this even would make it possible for distributions to write a GTK+ or ncurses frontend. Especially partitioning/installing with UEFI seems to be harder than necessary :D.

    Good luck, especially for the UEFI issues .. it’s a pain, and I know it :D.

    • Reply Teo |

      Thank you, this means a lot coming from a fellow install system developer 🙂

      If you got the chance, and since you clearly have the skill and experience, would you be able to reproduce that partitioning issue and please submit a bug report with log on http://calamares.io/bugs/ ? There are many different configurations out there, and our ability to test them all is limited.

  • Reply Ribbit |

    Excellent idea! Congratulations.
    Wishlist of possible future enhancements:
    *) text and/or nurses interface that work with a serial console — needed for server-class and “tiny” (i.e. without built-in video) machines.
    *) support for other architectures than x86. For example, ARM and PowerPC based devices often use different (sometimes radically different) disk partitioning schemes and boot technologies.

    I hope your modularity concept has taken these concerns into account.

    • Reply Teo |

      Of course. The first requires a second binary based on the same libcalamares core, the second should only require some changes to a few modules (not easy at all, but conceptually simple).

  • Reply hudecof |

    Automated install, like pressed or kickstart, will be really great. It will save a lot of work to deploy various distributions. Thumbs up 😉

  • Reply Paul M |

    I really like the OpenSUSE disk partitioner tool.

    Fedora’s is OK but has severe bugs.

  • Reply Rafa |

    Hi. Great work!!

    I tried to build in Debian but failed. Too many dependences.
    Then I tried to build the debian package, using the calamares-debian repository. I could not 🙁 because the dependencies as well. But I checked, and many packages required by calamares-debian does not exist in Debian (I tried Debian unstable and testing).
    Could you help me to build a Debian package for Debian testing?

  • Reply Matthias |

    My personal Wish: An OEM Mode, which let me install the OS and the User(s) choose there Name and Password on the first boot. Thanks a lot for Calamares 😀

  • Reply Allbiz:) |

    Just another this is awesome, you and the people contrib’ing to this are awesome post. Just about the time I conclude it’d be best if humanity goes the way of the dinosaur. Some intelligent, generous and kickbutt person does something to restore a degree of faith. Thanks so much for doing this.

    Lol … ya might in ways be reinventing the wheel. Though it’s a friggin brilliant wheel made out of space aged materials, filling a real void and distilled kickbuttness. You Sir … get an epic thumbs ^UP from this anonymous dork. 🙂

Post a comment