Say no to locked-down devices that limit our freedom to install apps and switch operating systems. Say yes to device neutrality, which ensures that we control our own hardware! Your device, your choice! Support our demand for the right to install any software on our devices.

Transcript of SFP#25: MirageOS and OCaml with Hannes Mehnert and Matthias Kirschner

Back to the episode SFP#25

This is a transcript created with the Free Software tool Whisper. For more information and feedback reach out to podcast@fsfe.org

WEBVTT

00:00.000 --> 00:04.640
Before we start with the podcast, we would like to say thank you to all of you who support

00:04.640 --> 00:07.740
the FSFE's work of money.

00:07.740 --> 00:12.760
Working for software freedom and producing podcasts costs money.

00:12.760 --> 00:18.200
Please consider supporting us with our nation and the FSFE.org slash donate and in the

00:18.200 --> 00:19.200
show notes.

00:30.000 --> 00:37.640
Welcome to the software freedom podcast.

00:37.640 --> 00:42.200
This podcast is presented to you by the Free Software Foundation Europe, where a charity

00:42.200 --> 00:44.440
that empowers users to control technology.

00:44.440 --> 00:49.440
I'm Matthias Kirschner and our guest today is Hannes Mehnert.

00:49.440 --> 00:54.360
Hannes is a free software hacker working on various projects including Mirage OS, a

00:54.360 --> 01:00.960
Unicle Operating System and the co-author of the book on functional programming in JavaScript.

01:00.960 --> 01:06.680
Besides being a hacker, he's the co-author of another book on Injit Kucin and enjoys being

01:06.680 --> 01:11.440
a Verista and likes to travel and repair his recumbent bicycle.

01:11.440 --> 01:12.640
Hello Hannes.

01:12.640 --> 01:14.160
Hello Matthias.

01:14.160 --> 01:24.320
So you once wrote in your biography that you feel safe in a garbage collected environment.

01:24.680 --> 01:30.520
That directly reminded me of Ada from the book Ada and Sangaman who also lives in a

01:30.520 --> 01:34.920
junkyard and I can somehow think about what you might have met by that but I would like

01:34.920 --> 01:38.160
to ask you, where does that come from?

01:38.160 --> 01:46.280
Well, so I do programming since several years and it turns out that programming isn't

01:46.280 --> 01:47.280
really hard.

01:47.280 --> 01:53.000
I have to keep so many things around in my brain that I really feel much safer if I don't

01:53.040 --> 01:56.520
have to think about memory management.

01:56.520 --> 02:04.680
If just there's a algorithm that takes care of it and I know that in history there have

02:04.680 --> 02:09.720
been garbage collectors that were really poor in performance but nowadays it's really

02:09.720 --> 02:11.440
not an issue anymore.

02:11.440 --> 02:17.680
I can afford to pay the performance penalty of a garbage collector and just use it and

02:17.680 --> 02:25.160
be much faster and programming and much and do fewer mistakes, well, programming.

02:25.160 --> 02:31.120
So you didn't mean actually like a physical environment of where you are in which with

02:31.120 --> 02:33.960
garbage around you but a digital one.

02:33.960 --> 02:34.960
Yes.

02:34.960 --> 02:35.960
Okay.

02:35.960 --> 02:45.680
So let's get back then to how did you actually get involved in all of this and programming

02:45.680 --> 02:46.960
free software?

02:47.600 --> 02:54.800
In free software, well, I think I started with computers were attracted or I was attracted

02:54.800 --> 03:02.520
to computers and then I joined the case computer club and there I did a lot of not programming

03:02.520 --> 03:09.920
but really, yeah, exploitation of computer programs and I looked from the side of the

03:10.000 --> 03:19.320
security so how can you take it computer and how can you get over the security means of

03:19.320 --> 03:26.560
the computer and so that's why where I get fascinated by how do you actually develop software

03:26.560 --> 03:33.360
that is not that easy to exploit that is much nicer to do there.

03:33.360 --> 03:40.360
Then yeah, out of political reasons and so on, I was from the very beginning, very convinced

03:40.360 --> 03:46.760
that free software is what I want to do because my lifetime is also limited and I want to contribute

03:46.760 --> 03:53.400
something to society and I strongly believe that when I write code, I have so much fun

03:53.400 --> 03:59.480
that I really want others to be able to use and modify it and that's the reason why

03:59.480 --> 04:08.640
I do mostly open source of, I mean 99% of my time is spending on his spend on open source

04:08.640 --> 04:10.280
of it.

04:10.280 --> 04:14.440
And a large part of that is going into Mirage OS, right?

04:14.440 --> 04:21.440
Yes, into Mirage OS and the greater ecosystem of OCaml.

04:21.440 --> 04:26.040
Okay, I think we have to go back to OCaml as well later.

04:26.040 --> 04:27.040
Yeah, yeah.

04:27.040 --> 04:32.400
But first, I mean, a lot of our listeners will think, well, I mean, there's the Linux

04:32.400 --> 04:39.040
kernel and with new Linux, you have an operating system there, there is several BSDs.

04:39.040 --> 04:43.320
So why did you start a new operating system?

04:43.320 --> 04:48.600
So first of all, I didn't start it, but I only joined the project back then and nowadays

04:48.600 --> 04:54.440
I'm doing a lot of work in that, I think I'm one of the main authors nowadays.

04:54.440 --> 04:56.720
And why did we start it?

04:56.720 --> 05:02.680
Well, I think that in both Linux and BSDs and also other operating systems, you see that

05:02.680 --> 05:05.920
there's a lot of legacy from the 70s around.

05:05.920 --> 05:13.520
I mean, as in recent years, you have heard about floppy disk drivers that were broken and

05:13.520 --> 05:21.280
let to exploit in QMO, you have seen that there are so many layers on top of layers that

05:21.280 --> 05:26.040
you have millions of lines of code in the Linux kernel, also in the BSDs.

05:26.040 --> 05:33.600
Nobody is there to say, oh, we don't need that anymore, who needs a SCSI drivers anymore?

05:33.600 --> 05:36.520
Why don't they just remove it?

05:36.520 --> 05:42.960
And so then there was at a time, there was this whole virtualization coming up.

05:42.960 --> 05:49.280
So with Xen being a hypervisor and trying to run multiple operating systems at the same

05:49.320 --> 05:58.440
time on the same computer, which was also done by some people who then started MirageOS.

05:58.440 --> 06:04.640
So they already knew quite a lot of Xen and how you intake the Xen, and they then thought,

06:04.640 --> 06:09.400
oh, what is the minimal thing that we can put there that runs as a guest?

06:09.400 --> 06:15.560
So not as a hypervisor, to take care of the real devices, but something that is there

06:15.560 --> 06:21.240
as a guest operating system and just have virtualized interfaces like a network card, a block device,

06:22.040 --> 06:27.320
and then does one thing that is supposed to do.

06:29.720 --> 06:39.080
Okay, so maybe before we go into some of the other details, what is the main use case of Mirage

06:39.160 --> 06:44.280
at the moment in like, if you have some practical examples, where it is used?

06:45.880 --> 06:51.640
Yes, so I think there's a large variety, some websites are using it.

06:52.360 --> 06:57.880
Then we have a calendar server, so a cloud of server that is implemented using MirageOS,

06:57.880 --> 07:03.640
and running as a MirageOS communicator. We have a firewall, especially for XeoopsOS,

07:03.640 --> 07:08.200
which is an operating system that uses a lot of isolation.

07:10.040 --> 07:14.600
And we are currently working on a VPN service, so client and server.

07:15.400 --> 07:22.280
We have replacements for, or we will work later in this year also on a replacement for

07:22.840 --> 07:30.840
DNS mask, which is DNS and DHCP server. We have, there's a product that is in high assurance,

07:31.640 --> 07:38.920
in the high assurance sector, and is acting as a service that is just there.

07:38.920 --> 07:43.400
So it's all basically about network services.

07:44.920 --> 07:51.400
And the interesting part for me at least is to have a really small system,

07:52.520 --> 07:58.520
so to not have as Linux, the journal purpose system where you have user management and the file

07:59.240 --> 08:06.120
and the shell and all of that, but really to have something with this down to the minimal.

08:07.320 --> 08:13.480
You also said once that like perfection is achieved, not when there is nothing more to add,

08:14.200 --> 08:19.720
but when there is nothing left to take away. So that's from my understanding also one of the

08:19.720 --> 08:26.040
principles for MirageOS, how do you implement that in practice?

08:28.600 --> 08:29.720
By removing code.

08:30.600 --> 08:35.480
So MirageOS is actually getting smaller and smaller over the time?

08:35.480 --> 08:42.680
Yes, yes, yes. So I mean, some measurements are, for example, the Firewall 4 chipset.

08:43.480 --> 08:51.400
We started I think with years ago, so maybe seven or eight years ago, it was maybe six megabytes

08:51.400 --> 08:56.840
in size, and that is a full virtual machine image. So there is a full virtual machine that you can

08:56.840 --> 09:07.240
run on your, than on your cube system. And these days, the same thing. So it does basically the same

09:07.240 --> 09:13.160
thing, and even doesn't a bit better because it has more performance. It's now only three

09:13.160 --> 09:21.640
points, three megabytes in size. And the question is how did we get there? Well, we look at the

09:21.720 --> 09:27.640
dependencies. We look at what we are actually using, and then trying to get rid of, or we try to

09:27.640 --> 09:33.960
limit the scope. So we ask ourselves, how do we actually need that code? What does it do in here?

09:36.040 --> 09:42.760
And I mean, I could imagine that this is something which is for people contributing to

09:42.760 --> 09:51.640
mirage as it might, I mean, from my feeling, it could be less difficult to attract people to

09:51.640 --> 09:57.880
write something new and to add something, than to get people to help you to reduce and maintain

09:57.880 --> 10:06.920
it over a longer time that it's getting like less complicated and reduce the complexity there.

10:06.920 --> 10:14.440
How do you attract people to this? How in general, how do you work in your community with such a

10:14.440 --> 10:23.320
principle? Well, we are also eager to basically have more code and more functionality inside of

10:23.320 --> 10:29.960
mirage, but it is the case that every now and then we think about what the mirage tool and the

10:29.960 --> 10:38.840
whole thing, what should it do? And what are the dependencies? And usually we attract people

10:38.840 --> 10:47.880
by having this very simple approach to operating system to engineering operating systems so that

10:47.880 --> 10:53.000
people can join or people can come around and they can understand what are the different layers

10:53.000 --> 11:02.040
and how does it work from we receive an network packet at some point two years how the HDP server

11:02.040 --> 11:08.840
handles the request and they can get and read through that entire code base within a day or two.

11:09.640 --> 11:18.200
So it's really attractive to have just this small or this tiny code base in comparison to

11:19.000 --> 11:26.440
contemporary operating systems where it takes you very several days or months in order to

11:27.400 --> 11:32.920
understand, read and understand the code. And that also means that if you want to debug a specific

11:32.920 --> 11:40.920
issue, you can do it within weekend. So I could imagine that that's also a big advantage then

11:40.920 --> 11:47.000
when you teach how operating systems works. Is that also something where mirage or as used sometimes

11:47.000 --> 11:57.960
or that people explain how operating systems work? So it's the case that some people are working

11:57.960 --> 12:03.880
at academia. So like at University of Cambridge where mirage was also started as part of a research

12:03.880 --> 12:13.320
project and they at least taught some lessons on how to use mirage as it shows some principles

12:13.400 --> 12:20.200
on mirage. So yes, this is a short break for our own cause. Working for software freedom and

12:20.200 --> 12:27.560
producing podcasts costs money. Please consider supporting us with a donation on the fsf e.org

12:27.560 --> 12:37.240
slash donate and then the show notes about the principles. So I mean there's also I mentioned

12:37.240 --> 12:43.960
that in the introduction that mirage OS is a unique kernel operating system. And I mean back in

12:43.960 --> 12:52.360
the days, I also own some knu-hurt CDs and played a little bit around with that. But when we now have

12:52.360 --> 12:58.840
an expert here, can you explain like what is the difference between a unique kernel like mirage OS

12:58.920 --> 13:02.200
and like the Linux kernel, which is a monolithic kernel?

13:04.600 --> 13:11.480
Her approach is that we really want to have, for example, the firewall to only act as a firewall.

13:12.120 --> 13:20.760
So as I briefly mentioned, there's not user management involved. There's no shell access to the

13:20.760 --> 13:26.760
firewall because why would you need it? Firewall doesn't have a file system. It doesn't even have a

13:26.760 --> 13:38.040
scheduler. So it's actually a single process. So each unit can also highly tailor its system for

13:38.680 --> 13:46.600
the service or the thing it should do. So it's a special purpose operating system in contrast to,

13:46.600 --> 13:51.720
for example, Linux, which is a general purpose. So you can do everything with the Linux. You can

13:52.680 --> 13:59.560
start your web browser and so on. And on Mirage OS, it's basically you don't have that flexibility

13:59.560 --> 14:08.040
at runtime. But at compile time, you choose which parts and which libraries you actually need

14:08.040 --> 14:15.080
for the Unicorn. So it's a lot about, you develop a lot of libraries, which are, for example,

14:15.080 --> 14:21.880
security protocols, network protocols, and so on. Then the Unicorn itself is just stitching

14:21.880 --> 14:28.680
together the different library. And that's then also the part where with this modular approach,

14:29.640 --> 14:35.640
OCaml comes in which you mentioned before, right? Yes. So what is OCaml?

14:37.000 --> 14:44.360
OCaml is a functional programming language. So there's a lot of theory behind it,

14:44.360 --> 14:49.320
but it's basically functional programming that you can, that everything is a value. So you can

14:50.360 --> 14:55.720
program with higher order of entrance and so on. And a lot of it is also that you have a lot

14:55.720 --> 15:04.840
of immutable state. So you don't mutate your whatever, but you just continue to use a very pure

15:04.840 --> 15:12.280
approach to programming. So we will also have some, some listeners who are not programmers. And I

15:12.280 --> 15:21.160
also the time that I program also a long time ago. What I know that you are very, very careful

15:21.160 --> 15:29.000
on what languages, what programming languages you choose. How would you explain that to non-programmers,

15:29.000 --> 15:36.840
why this matters and why you choose this approach? So the question is what do you want to get from

15:37.000 --> 15:40.920
a program language? And there's on the one side, you can get a lot of

15:42.520 --> 15:48.760
dynamism like in JavaScript. You can just write and it works or you get a runtime in initial.

15:48.760 --> 15:55.000
JavaScript also you can do functional programming with. What you can do quite a lot where

15:55.800 --> 16:03.000
there are a lot of checks at compile time already where you verify that certain things are passed.

16:03.880 --> 16:10.760
So where you have so-called types, so information about the program at the compile time.

16:11.800 --> 16:18.200
And if you have a type system and the compiler checks that the types fit,

16:18.920 --> 16:25.400
then you don't run into certain issues at runtime because the compiler already

16:26.040 --> 16:31.560
verified or the compiler already validated that this is good to go.

16:32.200 --> 16:38.280
Because if you have the mathematical operation plus and you just say, oh, that is defined for

16:38.280 --> 16:44.840
numbers and you add two numbers to get, then that's fine. But if the compiler finds out, oh,

16:44.840 --> 16:50.840
here you have a string and a number. I don't know what to do with it. Then in a statically type

16:50.840 --> 16:57.000
language, you will get that compile time and error. And for example in JavaScript, the compiler

16:57.240 --> 17:05.160
is not really a compiler. So what you will get is something that the JavaScript implementation

17:05.160 --> 17:11.320
figured out on what to do with a string plus a number. And that is different from what it does

17:11.320 --> 17:23.800
when it gets a number plus a string. So I try to simplify that by like with the operating with the

17:23.800 --> 17:30.440
program in language you choose from your ratio as the there will be less guessing how you could

17:30.440 --> 17:36.840
have meant it. And it would rather say, well, no, that's the way how it is meant. And I will not

17:36.840 --> 17:44.360
try to guess. Thereby you will have to take more care about the state of when you program it.

17:44.360 --> 17:50.680
But on the other hand, there will be less security problems or other problems when the program

17:50.680 --> 18:04.120
actually runs. Yes. Okay. Good. Thank you. So I'm one one thing I also wanted to to understand with

18:05.480 --> 18:14.840
now working on on Mirage OS. I mean, a lot of free software projects, they also have this issue on

18:14.840 --> 18:23.400
how do you maintain and develop that sustainably? And one component and this is often how is the

18:23.400 --> 18:31.480
software financed? So how is that with Mirage OS? How do you find this to work on this? I mean,

18:31.480 --> 18:36.920
how many people in general are working on this at the moment? It's hard to tell how many people

18:37.000 --> 18:44.840
are actually working on that. I can tell you that I six years ago I started collecting with nowadays,

18:44.840 --> 18:52.600
we are three people and we work full time on Mirage OS. And we are financed on various pillars,

18:52.600 --> 18:59.080
one is donations so that we can accept donations. So we have we have something that we don't run

18:59.080 --> 19:05.640
ourselves, which is this nonprofit thingy that was run by other people and they just host us.

19:06.600 --> 19:12.360
So donations is something we get every now and then? Is that donations? Is that mainly

19:12.360 --> 19:18.360
individuals or are those more corporate donations that are? It depends. It depends.

19:20.200 --> 19:28.760
Then we apply for funding at the public sector. So in Germany, you have, for example,

19:28.760 --> 19:34.680
prototype fund where we received some money from then on the European level, you have since

19:34.680 --> 19:43.480
quite some years this NGI, this next generation internet initiative where we are pretty regularly

19:43.480 --> 19:48.840
applying for funding and also receiving funding from them. And then we also do commercial contracts.

19:48.840 --> 19:56.440
So sometimes some company or someone reaches out to us and asks us whether we can work for them.

19:57.400 --> 20:03.160
And we then basically agree on a daily rate and say, okay, well, we can work within the next

20:03.160 --> 20:11.880
half year, so on so many days. And we put all of that into our budget and then we take a look

20:11.880 --> 20:18.520
on how to do that. So obviously, commercial contracts are giving us more money.

20:19.480 --> 20:26.440
Yeah, yeah, yeah, yeah, daily rate. So sometimes it is that we do commercial project for two months

20:26.440 --> 20:32.680
and then the next three months we don't need to work for for money. So then we have three months

20:32.680 --> 20:39.640
basically of time that we can spend on maintaining. So do you also have this this issue then that

20:40.280 --> 20:48.920
the grants and the finances financing is mainly from the two pillars like the

20:48.920 --> 20:55.080
the grants and the commercial projects mainly for adding new features and less for maintenance work

20:55.080 --> 21:03.400
or are there also some that are actually saying like, please take time, reduce complexity, bring it

21:03.960 --> 21:07.640
back to your principles or how is that working?

21:09.480 --> 21:15.080
Usually it is about new features. But also when we work on new features, we take time on

21:16.120 --> 21:22.120
thinking about what do we actually need and how do we integrate it into the current ecosystem

21:22.120 --> 21:29.320
or into the current library system. And for example, for the VPN client, we got a grant from

21:30.280 --> 21:37.080
NGI, we are an Lnet and there was one of the milestones was then also performance work.

21:37.080 --> 21:43.480
And performance work is definitely something where we read through a lot of libraries and we also

21:43.480 --> 21:48.040
worked a lot of a lot on various different libraries doing basically maintenance

21:49.080 --> 21:57.480
because we needed to get rid of some indirections and yeah, in order to meet basically the performance

21:57.560 --> 22:06.520
goals. So we try to to also in these grants and so on to embed milestones like writing

22:06.520 --> 22:15.320
documentation and performance work and so on and also refactoring work to get to get

22:15.320 --> 22:21.960
yeah, to get the dots funded. For transparency reasons, the FSV is also involved in those NGI

22:22.040 --> 22:28.760
grants. We are part of the consortium to then provide support to those who get those grants

22:28.760 --> 22:36.200
in our case with legal and licensing topics when there are questions about that. But having said

22:36.200 --> 22:43.800
that, my impression is also that in the NGI program, it's there people understand that this is

22:43.800 --> 22:50.360
part of software development and a lot of other grants, it's often not something people like

22:50.440 --> 22:56.680
I don't pay for them to clean up their code. I want to have this feature. So I mean, that's a good

22:57.560 --> 23:02.440
really good part there with the with the NGI programs and to other people out there when you

23:02.440 --> 23:08.360
want to like to to get funding the NGI programs are definitely something to look into and see if

23:08.360 --> 23:16.280
you can also get funding through that. About the last pillar with this commercial

23:16.840 --> 23:23.880
contract, is it then something where a lot of them are also using Mirage in commercial products

23:23.880 --> 23:30.840
or commercial services? And that depends. So for one customer we did design and implementation

23:30.840 --> 23:37.800
of a broad type of this site sharing system. Other companies who reach out to us, they are more

23:37.800 --> 23:44.200
interested in our skills to develop OCaml code and network and security code in OCam.

23:45.000 --> 23:53.560
Usually it's also the case that we do it all open source. So we agree with the contractors

23:53.560 --> 23:59.400
that are with our contractors that we will publish the source code also on the open in the open

23:59.400 --> 24:08.680
source. So when you're looking into the future, what are your plans? What is your vision that you

24:08.760 --> 24:16.360
want to accomplish with Mirage OS? That's a great question. So I'm involved with Mirage OS since

24:16.360 --> 24:23.080
roughly 10 years. And back then when I started to work on that, I really wanted to get into network

24:23.080 --> 24:28.920
services and onion routing with Mirage OS that hasn't happened yet. But over the years, I also

24:30.840 --> 24:37.480
changed basically what I want to achieve. And currently my goal, my goal is really that I want to

24:37.480 --> 24:43.720
enable more people to run their own digital communication infrastructure. So like email,

24:44.920 --> 24:56.200
photo sharing, taking notes, whatever one not. And my goal there is, or the problem I see at the

24:56.200 --> 25:03.880
moment in the world is that a lot of the communication is centralized that very few multinational

25:03.880 --> 25:11.320
companies like hotlook from Microsoft, like Facebook, also with WhatsApp, and then also Google

25:11.960 --> 25:22.040
at Apple. And they are basically three or four or five big players who have a lot of data

25:22.040 --> 25:28.520
from all of the users. And similar to the FSE campaign of there's no cloud, there's only other

25:28.520 --> 25:37.080
people's computers. It is really my goal to make it easier to deploy and run the services on your own.

25:37.080 --> 25:45.560
Because also I, I, yeah, I'm involved with computer security since more than 20 years. And there I

25:45.560 --> 25:52.440
also figured that running your own mail server on Linux or previously machine is really complicated

25:52.440 --> 25:57.320
because you have to know so many things. You have to know about file systems permissions. You

25:57.320 --> 26:03.160
don't want to expose your private key material via some web server and so on. So it's really,

26:03.160 --> 26:08.680
really, really hard to get there. I mean, a lot of people have taken a lot of trainings and in doing

26:08.680 --> 26:16.040
that. But I think that all of that could be easier. And with Miratwares having this program,

26:16.040 --> 26:23.240
programming language, OK, we have a lot of safety, basically built in similar, similar language

26:23.320 --> 26:33.960
would be rust, but actually Miratwares predates rust a bit. So we are in Okamel. And yeah,

26:33.960 --> 26:42.040
I really want to get that hot off the door so that more people use it. And in, and a few years ago,

26:42.040 --> 26:49.320
we caught a rather large NGI grant to work on reputable binary builds. And that was a big

26:49.320 --> 26:55.720
achievement because previously we only had source code basically and said to the people,

26:55.720 --> 27:01.800
oh, compile your own Unicronon. And nowadays we have infrastructure and we actually do on a daily

27:01.800 --> 27:09.320
basis, compilations of Unicronons. And since each Unicronon uses a lot of libraries, like easily

27:09.320 --> 27:15.880
100 200 different libraries. And these libraries are developed independently. And they are pushed and

27:15.880 --> 27:22.040
released sometimes on weekly basis, sometimes on monthly basis. But we use this reproduce a

27:22.040 --> 27:29.640
building facility to build our Unicronons every day with the latest versions to see whether we

27:29.640 --> 27:37.880
have failures and also to see what actually affects our output. So now that you mentioned reputable

27:37.880 --> 27:43.560
builds, we need to quickly go into this. I think we explained it in one of the podcasts before,

27:43.560 --> 27:50.520
but so the idea with reproducible builds is that if you compiled a program that every time you

27:50.520 --> 27:58.440
compile it, that you can achieve the same binaries afterwards. So if you then publish the binaries

27:58.440 --> 28:05.080
that can run on on another platform, that you can say, this is actually coming from this source code

28:05.800 --> 28:14.440
and without any other additions from there, right? Yes. And the idea would then be for Mirage,

28:14.440 --> 28:21.960
I mean, what you can already do is you can run Mirage on another operating system to then provide

28:21.960 --> 28:28.520
like this calendar sharing with others. And the idea would then be that you add other services

28:28.760 --> 28:34.760
there like the thing you're working on with with websites to provide website or then with an

28:34.760 --> 28:41.400
email server that it's very easy for people to at home or with a small rented server without a lot

28:41.400 --> 28:48.280
of resources, they can run a lot of the infrastructure they need for daily life without depending on some

28:48.280 --> 28:55.560
large infrastructure provider or service providers. Yes. And also they can easily upgrade the

28:55.560 --> 29:02.200
single services very independently because this is basically just a aesthetically compiled virtual

29:02.200 --> 29:07.720
machine image. So you can just update it and try it out and if it doesn't work, you can just

29:07.720 --> 29:14.680
revert to the previous version. And I think what you what you briefly mentioned about this few resources,

29:14.680 --> 29:22.120
that is really the crucial bit. It is not only about security, but also about resource usage.

29:22.120 --> 29:27.640
So if you have a very small system, you have less attack surface, but at the same time,

29:27.640 --> 29:32.840
you have less code that is running, which means you actually use fewer resources.

29:33.480 --> 29:40.920
That's also one of the topics we also touched before about like sustainability in software

29:40.920 --> 29:50.520
development. And I mean, with running such a, yeah, minimalistic by design operating system,

29:50.520 --> 29:57.320
that also means that you need way less powerful machines to run this on. And I mean, can you,

29:57.960 --> 30:03.240
what hardware can you use to use Mirage on dislike with this calendar server?

30:04.440 --> 30:09.960
Well, obviously you're left up, but you can also do it on a Raspberry Pi. You can, I mean, even

30:09.960 --> 30:16.120
years ago, there was a person who ported Mirage was on an ESP32. So that's a small microcontroller

30:16.120 --> 30:25.640
that you can get for five years or so. And yet the variety is large. And the research user

30:25.640 --> 30:33.720
is really, really small. Also, that is also what the cubes community appreciates a lot about

30:33.720 --> 30:43.240
firewall, because it uses 10 times less memory than Linux with having the same, the same behavior

30:43.320 --> 30:46.520
or having the same thing that was actually doing.

30:47.080 --> 30:52.520
Actually, also the first time I heard about Mirage was that a cubes user told me about it and

30:52.520 --> 30:57.000
showed me like how cool this is that you can run this this firewall and it doesn't need a lot

30:57.000 --> 31:03.720
of resources, because I mean, usually when you use cubes where you have different, a lot of

31:03.720 --> 31:09.720
compartmentalization for your operating system, it takes a lot of resources for you. So you're

31:09.720 --> 31:17.720
very happy if one of those components is using less resources there. So and so by this design,

31:17.720 --> 31:25.160
it's also from your perspective, that's also the approach how you can achieve a decentralization

31:25.160 --> 31:32.280
without explosion of resources needed for this decentralization, right? Yeah.

31:32.840 --> 31:42.520
Okay. Then is there anything else you wanted to talk about from the technical perspectives

31:42.520 --> 31:56.120
with Mirage OS? I think maybe, yeah. So we talk quite a bit about cubes and Xen, and that was

31:56.200 --> 32:03.000
basically the initial days, but nowadays that also computers are getting a bit more modern

32:03.000 --> 32:10.920
and having these virtualization support in hardware and Linux having, for example, this KVM

32:10.920 --> 32:19.080
subsist. That is also something we support since seven or eight years. So we are not stuck with Xen

32:19.160 --> 32:27.000
We were using Xen in the beginning, but nowadays we moved a bit further and also support KVM

32:27.800 --> 32:33.720
and previously it's called VIVE and OpenBC. It's called VMM. So all these hardware features.

32:35.880 --> 32:42.120
So it's more like we try to be open for any operating system. And it is not a complete

32:42.120 --> 32:48.920
operating system. So I don't use it on my desktop, I don't use it for development, but I run it

32:48.920 --> 32:56.760
in order to have some network services. So I think that's something to make clear that it's not

32:56.760 --> 33:04.040
something you don't install Mirage OS on your mobile phone or on your laptop as the first operating

33:04.040 --> 33:10.360
system, but you started from within another operating system. Yes. While at the same time,

33:10.360 --> 33:17.080
for example, for the Raspberry Pi, we have a native port. So that means you can just run it

33:17.080 --> 33:22.280
directly on your Raspberry Pi. You don't have another operating system below it.

33:23.480 --> 33:30.520
Didn't know about that. Good that we clarified that. Before we go to our last question, then I have

33:30.600 --> 33:39.960
one other question because I wanted to know like how did you end up after you do all this

33:39.960 --> 33:44.360
programming and those technical things? How did you end up writing a book about Indian cuisine?

33:45.320 --> 33:52.600
It's actually a book about Indian cuisine and functional program. So there's a book. It's called

33:52.760 --> 34:01.560
Curry Book in German published by Oreli. We had, obviously, this idea that in functional programming,

34:01.560 --> 34:10.200
you have this mechanism called currying and curry and Indian cuisine and Indian curry that was

34:10.200 --> 34:16.840
just such a nice match that we had this idea to write a book about it. The Curry book

34:16.840 --> 34:21.880
have some recipes for Indian cuisine in there, but also teach people how to do functional

34:21.880 --> 34:34.040
programming in that book using JavaScript. That's okay. Now I get it. We actually did the

34:34.040 --> 34:41.160
analogy with recipes and programming. We also used that for a long time and I think that was

34:41.160 --> 34:50.120
first time I was on television at the results of us recording. I did some Pesto where I absolutely

34:50.120 --> 34:58.680
failed to do that and explained software while doing that. And with some of the readings,

34:58.680 --> 35:04.360
recently we did, we had one of our volunteers who came to those readings with an ice cream machine

35:05.000 --> 35:13.240
and then printed out recipes in programming, language programming style to show the children what

35:13.240 --> 35:22.040
is actually used to do the ice cream there. Good. Well, Hannes, I at least learned a lot during

35:22.040 --> 35:31.240
our conversation here again. The last question we always have is, as we are running the I love

35:31.400 --> 35:39.400
software day now for ages and on this day on the 14th of February, we encourage everyone to thank

35:39.400 --> 35:45.640
other people in our community for things they do for a software freedom. On the other hand,

35:45.640 --> 35:50.440
we also think about 14th of February that's one day of the year. So in this podcast, we do that

35:50.440 --> 35:56.600
every time. So now you have the chance to thank whoever you want for the things they do.

35:57.560 --> 36:03.640
Oh, that is a good question. So I'm really grateful, for example, for my development environment. So

36:03.640 --> 36:10.440
for all the people who work on EMAX, I'm really happy about that because that gives me a lot of

36:10.440 --> 36:18.280
productivity. Then I'm really happy about, yeah, the people doing freebies TV because I use free

36:18.360 --> 36:27.480
BST on both my laptop and my service. And it's just such a simplistic, nice way to go around.

36:29.400 --> 36:33.720
And apart from that, I mean, there are so many applications that I rely on on a daily basis.

36:33.720 --> 36:42.040
And it's just so amazing, like Firefox, like a mail client and all of that. And that's just

36:42.040 --> 36:49.800
impressive that it's available for free. For all the people who do work on compilers and so on,

36:49.800 --> 36:53.560
and on debuggers because without the user, I wouldn't be here.

36:55.400 --> 37:01.000
Then thank you very much, Hunters, for being with us today and all the best for your future

37:01.000 --> 37:06.680
development with Mirage and your other projects. Thank you very much. Thanks for having me here.

37:07.320 --> 37:12.440
This was the Software Freedom Podcast. If you liked this episode, please

37:12.440 --> 37:19.800
recommend it to your friends or colleagues. And also subscribe so you will not miss the next episode.

37:19.800 --> 37:24.120
This podcast is presented to you by the Free Software Foundation Europe. We are a charity

37:24.120 --> 37:29.960
that works on promoting Software Freedom. If you like our work, please support us with a donation.

37:29.960 --> 37:42.040
You find more information on the fsafi.org slash donate. Thank you very much. Bye-bye.

Back to the episode SFP#25