Contribute and be proud of defending Software Freedom from monopolist control! We are intervening in the Apple vs. EC case: Find out more.

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