Hannah: Hi, I am Hannah. I studied Computer Science in Basel. In my second semester I joined the #kde-windows channel on Freenode IRC to complain about some issues I had with Amarok on Windows, I got involved in the KDE Windows project and its build tool KDE Emerge.
Dominik: Hey, my name is Dominik, or as most people call me, “Domme“. I’m a freelance software developer currently living in Bonn.
Thanks for taking out time to answer my questions. How did you get to programming? Favorite programming languages?
Hannah: Some years passed and somehow I’ve become the maintainer of KDE Emerge, which is nowadays called Craft. In addition to my studies, KDE taught me how to program and I gained the ancient knowledge about C++ and Python.
Dominik: I got into programming after I had read a book about HTML when I was 11 years old and quickly got annoyed that the pages I could create were… static. I guess the first thing I realized – although I didn’t have a word for it – was that I needed templates and loops to end endless copy-pasta. So I learned PHP quickly after, and a bit of JavaScript. Does anyone still remember when DHTML was a commonly used term?
Today I focus mostly on JavaScript and C++ but there are a lot of fun languages like golang or python. I definitely want to play around with Rust one day…
Recently, you brought tremendous improvements to the build process of the ownCloud Client for Windows. What did you do?
Hannah: Until recently ownCloud for Windows was cross-compiled, recent changes suggested that moving to native builds would simplify the development process……
Dominik: I did the new .msi for installing the client on Windows to simplify large scale deployments. As Hannah already said, we used to cross-compile and cross-package the ownCloud Client from Linux to Windows.
The WixToolset I used to create the new installer does not work on Linux and so we had to pull in native Windows into our packaging pipeline. At that point I used last year’s ownCloud hackweek to play around with MSVC and Windows for Docker to create a complete native build and packaging pipeline. Maintaining the cross-toolchain had meant a lot of work for us before, especially with every new Qt version.
I knew Hannah from countless KDE events and because she contributed Windows patches to Tomahawk Player, which I’ve spent most of my time on for years. So switching to native MSVC builds was a great opportunity to finally try “Hannah’s Craft” again after some years, especially because it is – despite of its pure Windows roots – a cross-platform tool.
And I saw a long-term chance to simplify and unify the building processes for all our platforms.
So if I’m a developer and want to build my changes to the ownCloud Client – what do I have to do?
Hannah: This is possible with only a few steps:
- First, setup Craft.
- Install the owncloud blueprints
craft --add-blueprint-repository https://github.com/owncloud/craft-blueprints-owncloud.git
- Tell craft to build ownCloud from git with
craft --set version=master owncloud-client
, and install ownCloud:craft owncloud-client
- If you now want to get your changes in, switch to the owncloud clone:
cd owncloud-client
and apply your changes. - Now you can run
craft --make owncloud-client
to build with your changes.
Dominik: Those instructions are the same no matter if you are building on Windows, macOS or Linux.
Why is Craft a good solution for dependency management?
Hannah: Craft offers you the ability to manage your dependencies on Windows, Linux and Mac. You decide whether you speed things up by using the precompiled binary cache or, in case your a bit paranoid or you want to build a special configuration, like a full debug build, you can decide to build everything from source. Such a build from source can result in your private cache that can be hosted on your private infrastructure.
Craft has great support for running on a CI (continuous integration). In case your CI provider starts a new VM for each build, the precompiled binaries allow you fast CI builds.
Craft has built-in support for various installers. With a simple command you will get a full NSIS based installer, an appx package for the Windows Store, or a Mac dmg package, for your application. Support for AppImages is planned.
Craft is Open Source, it’s licensed under the BSD-2 license.
Why did you start working on Craft in the first place?
Hannah: KDE Emerge, now Craft, was started to enable us to provide all KDE software and the required 3rd party libraries in 2007. I only joined later, but I took over the development a few years ago. The tool matured. The former Windows and from-source-only build tool is now a cross platform packaging manager that enables quick CI builds.
Managing 3rd party dependencies on Windows was a hell. I’ve seen many projects with pre-built binaries in their git, with a huge cmake infrastructure to bootstrap the dependencies or even in-house tools similar to what Craft does.
During the Conference, I saw the two of you hacking around all the time. What was it about?
Hannah: While Craft supported Mac for some time now, we worked hard to improve the platforms support. We also made the fully relocatable binary cache available for Mac, which is a requirement to be able to run on a free to use CI.
In addition, we got a prototype of a Mac pkg packager and application signing.
Hannah, this was your first ownCloud Conference. How was it to meet other ownClouders on the conference?
Hannah: Besides Dominik I didn’t know anyone in advance, but that didn’t matter as the community welcomed me heartily. We instantly discussed software architecture, astrophysics and the meaning of life.
Thanks again for your work, and for answering my questions! See you, at the latest at next year’s ownCloud Conference!
Do you want to contribute to the ownCloud Client? Join the development of ownCloud.