Files

607 lines
53 KiB
Plaintext
Raw Permalink Normal View History

Episode: 3559
Title: HPR3559: Linux Inlaws S01E52: The Zig Project
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr3559/hpr3559.mp3
Transcribed: 2025-10-25 01:26:28
---
This is Hacker Public Radio Episode 3559 for the first time at 24th of March 2022.
Today's show is entitled, Linux in-laws S01252, the ZIG project and its part of the series,
Linux in-laws, it is hosted by Monochrome, and it's about 69 minutes long, and carries
an explicit flag. The summary is an interview with LORIS TROOXID game.
This is Linux in-laws, a podcast on topics around free and open-source software, any associated
contraband, communism, the revolution in general, and whatever else, fans is critical. Please
note that this and other episodes may contain strong language, offensive humor, and other certainly
not politically correct language. You have been warned. Our parents insisted on this disclaimer.
Happy mom? Thus the content is not suitable for consumption in the workplace, especially when
played back on a speaker in an open-plan office or similar environments. Any miners under the age
of 35, or any pets including fluffy little killer bunnies, your trusted guide dog, unless on speed,
and Q2T Rexys or other associated dinosaurs. Welcome to Linux in-laws season one episode 52.
Martin, how are things? Yeah, I think so. Good. How are you? And more importantly, that was our guest.
Can't complain Martin, can't complain, but before we go into our guest, how is this situation shaping
up at the UK? I understand that Lizzie hasn't stepped down yet? No, she won't anyway.
This is comes with a job right. I see. To resign. So you can't resign. You simply don't know
whatever. I see. Okay. Unlike her name, Merkel, she resigned. Yeah, she resigned. That's
unofficial. Yeah, she's going back into physics. There's an episode of 2016. No, no, of next
government negotiations happen now. About 12. If you want to know, by the way, people,
if you want to know about the future of Mrs. Merkel, as in the external transfer, there's an
episode of the dark side last year that gives a little bit of a clue at what's going to happen.
And more specifically, the episode of the Halloween episode of last year. But this is not
about the past, but rather about the future. So Martin, why don't you welcome all guests?
Yes. Tonight we have a special guest who is someone we know from a few years ago.
The past. Yes. Yes. Yes. Yes. Well, a bit of recent past. Let's put it that way.
He's heavily involved with a programming language. Yes.
Comes to tell us all about tonight. Yeah, that was the point in time.
I think even before you defected, right? I think Laura's defected first. He did. Sorry,
I wouldn't. I wouldn't. I wouldn't. I wouldn't. I wouldn't use the term defected now,
but just for the why don't you introduce yourself and all results will be resolved very soon.
Hello, guys. Um, well, uh, wait, Martin, you defected?
Yes. Yes. I left. That's a straight. It's not an army. There's no defection possible.
I guess he's run by, yeah, let's not go into the details of who's run by.
Laura, sorry, sorry. Maybe. Before we drift into the internals, into the internals right away,
why don't you introduce yourself? And then I'm going to, I'm going to set on, I'm going to
set some of that on all the defections that happened since you left. Oh, okay. Yeah. Let me
well, okay. So hello, everybody. I'm Laurie Scrawl. And I'm currently with PEOPLE Community
at the zix of a foundation. And, uh, well, we were saying that we were talking about the
faction a moment ago. So I joined the zix of a foundation after leaving red slabs where I was a
developer advocate. And I don't know, I guess I put my marketing skills that I gained at red slabs,
at use now. I mean, I'm putting them at use now at the zix of a foundation. Yeah, this is,
and this is how we all met. Martin, myself and Laura's, of course, were working at red slabs
and we also called red slabs. Uh, Martin has defected and he has defected since again. I'm still
with redis as it's not called these days, but this, but this episode is not about redis or, or,
or VMware or bright light, whatever it was called Martin, but rather about the zix programming language
and the zix foundation. So, Laura, further ado, why don't you tell us a little bit about the
foundation as a programming language as such? Sure. Um, and also, I, I guess I need to do a good job
right to convince you guys because I, I listened to your last podcast. You did it. I did it. Martin,
that's a listener. Excellent. Sorry. Good. You guys didn't sound super stoked by ZIG when you were
discussing it the last night episode. Well, we don't know anything about it. So what do you
do? Indeed, we don't. Otherwise, it's a problem language. Yes. So, okay, ZIG is a programming language.
We on, on the website, we have the stagline where we say that it's a general purpose programming
language. Um, you know what? I'm bringing up, I'm going to bring it up and read it, uh, directly.
That doesn't sound glorious. But, uh, here's the thing. I can justify each word, uh, which I think it's
more interesting and concise. So, ZIG is a general purpose programming language and to change for
maintaining robust, optimal and reusable software. So, the idea behind ZIG being a general purpose
programming language is that it's a programming language that doesn't have like a runtime,
and it doesn't have dependencies on things that you can find on like full blown
personal computers, but then maybe you wouldn't find in embedded devices. So, uh, for example,
you can't really program a tiny embedded devices with Python without weird compromises in ZIG.
You don't have that. It's a tool chain because you can use ZIG to compile CNC plus plus code
and cross compile it. So, like Linux windows are 2x86. And that, that it's known, that is
non-trivial. It's weird, but CNC plus plus have always been weirdly hard to cross compile.
And finally, the robust optimal and reusable is just how we like to describe
how an ideal Z program should look like because ZIG puts a lot of emphasis in handling errors.
It doesn't have exceptions, for example. So, whenever online can error out, you know it because
error is part of the return time and stuff like this. Also, we as a language ZIG is very explicit.
There is no hidden control flow, no macros, and like the general ethos of the language is to be
easier to read than it is to write. Sometimes you write a bit more, but the idea is that who comes
in and reads should not be confused by your code, normally.
It's like a modern C slash C plus plus slash rust container, if you will. It's in the same
ballpark, roughly speaking. And how does it come about? I guess, did someone just decide on
they were going to invent a new program language or was there something specific that I thought
or this is not good in C or C plus plus? So, I think that the story is, okay, do you want to know
the story that I like to tell people or do you want to know the real story?
The truth and the whole truth.
Okay, so I'll start with the one that I like to tell. The one that I like to tell is that
the creator of the language is Andrew Kelly, who at the time was working at OKCupid.
And apparently, OKCupid is a giant C plus plus code base.
Even though it's a website, at least that's the part that everybody knows about, right?
But apparently it's implemented in C plus plus. So, the story that I like to tell is that
Andrew, when they was put in charge of a messy C plus plus code base, and he told him, well,
you need to maintain this. And he did the only rational thing, like the shortest path to maintain
a C plus plus to maintaining a C plus plus code base, it's doing that in your language and
rewrite it in that. That's what I like to tell. But the reality is that I believe that Andrew
has always been interested in audio processing stuff. So, like, making digital music, right?
And if you want to do tooling the works with sound, it needs to be very efficient. You cannot
have like garbage collection poses, stuff like this. And so, he looked at a few languages,
and he wasn't happy with any that he tried. And so, he ended up basically working on C.
So, this is the official version. What's the unofficial one?
Well, no, the second one about how the stuff is the official version.
Ah, the version is to tell is the OKCupid one, the one where he had to work on a C plus plus
code base, but that one is not true. OK, so no facilities involved, no money changing, and that's
the sort of thing. Not yet. OK, I fully stosure, I had a very brief look at the language over the
last couple of years. Let's start at the beginning. Zick was invented about 2015, 2016, something like this.
Yeah, I think he checks out. I don't remember precisely when there's also, you know,
the initial part where like it's a private repo, so nobody knows about it. Then he becomes a public
repo, but then still nobody knows about it. OK, I'm not exactly clear on that period, I guess.
I joined Zick more or less around release 0.4, I believe. Got it.
Going back about 10, 12, 13 years ago, I was just invented by Google.
Mozilla had just dreamt up this or somebody at Mozilla. Sorry, I should probably be more precise.
Somebody at Mozilla had just dreamt up this requirement for a new language, because C plus plus
and C didn't cut it anymore in terms of total cost of ownership of the code base,
you could have to know the rest of it. Hence go lang or affectionately also known as go was
and rust were born. Now, if I take a closer look at Zick, it does remind me in certain quarters
of both rust and go lang. It's not fully object oriented. It does support structs that
reminds me pretty much of rust. Enums are very close to rust. For example, if I take a look at the
other type and we're not getting too technical here, that reminds me of really of rust.
Where do you see the differentiator between say go lang and rust in a Z context?
I think that there is some difference. There are parts of the Zick syntax that kind of
remind of rust, but I know Zick, I've been doing Zick professionally now for a while, for more than a year.
I still, given that, I don't have an easy time reading rust programs. Even though parts of the
Zick syntax are similar, there are some big differences when it comes to how progress I end up
written in the end of the day. I would personally say as a still imprecise way of describing
the differences, but just to as a first approximation. I think that rust is a language that
loves abstractions and complicated stuff in the same vein that C++ does, while Zick is more on
the C side of the equation. On the side where you don't want to go to insane with abstractions.
Now, that said, while I personally, clearly, definitely in the camp of simplicity, so I definitely
prefer the Zick approach compared to the rust one. Obviously, there are some advantages to each
approach. There's people who can make the C++ work for them beautifully, and so
more power to them, that's my point. But yeah, so that's the bigger difference. I would say then,
if you were to compare rust and go and see where Z is in that spectrum, yeah, maybe it's
in between in some ways, although it doesn't map perfectly because Go is garbage collected, Zick
isn't. I would say that Zick is a simpler rust. It's a systems programming language in a way that
I don't think Go truly 100% is, but on the other hand, it does share with Go on appreciation for
simplicity. That said, Go like simplicity to a minimalistic level that I think it's kind of
unique of Go, and even though I like Go a lot, I really like Go, but I don't know, some things
are a little bit minimalistic for my days nowadays. Interesting perspective, Flores,
many people do say that rust has a very steep learning curve. Having learned rust myself and
full disclosure, I'm not. I wouldn't because I wouldn't consider myself a rust expert by no means.
I dabble and rust a little bit here and there, but that's about as far as it goes. I can
concur with the entry into the program language, not the easiest one, especially given the concepts
like ownership of variables, how memory is managed and rust and all the rest of it. I fully
concur with your observation that probably rust is too heavy on abstractions, and it's an
interesting perspective that you see this closer to see. Now, again, full disclosure, I'm really old,
so I learned to see about 30 years ago, give or take a few years. When I take a look at the
programs and the website tells me, apparently, because of the LLVM backend, you consider Zik to
be a drop-in replacement, and a lower level to be very similar or rather off-sea. How do you see
this relationship from the huge code base that is out there with regards to see Zik maybe being
a logical successor to see in the regard? Yeah, so we have an actual slogan for this.
The slogan is, maintain it with Zik, and it's on the website, but it's also the title of a blog
post that I wrote a while ago, and I think that we're going to use it for something else
in the future. So the idea is this. You can use Zik as an in-place replacement for clang. So there's
CC command. If you do Zik CC, then that's a flag-compatible interface with clang. So you have a
C project. You compile it with clang. You use to compile it with clang. You can swap in Zik CC.
Now, that alone doesn't sound too interesting. Why would you do that?
Clang is plenty good. Why toss in another thing? Well, here's how it works. You toss in Zik CC
and your stuff keeps working. Then with a tiny little bit of work, depending on how complicated
the project is, you can tweak a little bit in your make files to remove, for example,
target specific capability checks. Like, for example, you know how sometimes build scripts
are trying to look if your system supports a given feature or not, but those are tied to your
system. So if you remove those, and clearly you, as I'm going to say, you do that in a reasonable
way so that you don't remove a check and then assume that something through is through when it's
not. But the point is, you do it correctly, and you can now cross-compile your project. We actually
brought a blog post series where we actually did this with Radys. So step one, replace your
GCC or whatever your C compiler with Zik CC. Step two, tweak a tiny little bit the variables
that you feed into the make file and add the appropriate flags to Zik. And it's literally just
dashed target x86, Windows x86, Linux, whatever you want. And now you can cross-compile. And we
actually, in that blog post, cross-compile renders. So we did it on three actually while testing
this out the first time. So like I was on a Mac and I cross-compiled a version for Linux and I
sent to Enru and he was able to run. And that's step two. So cross-compilation, enabling cross-compilation.
And by the way, if you were to try to cross-compile a C project by yourself without Zik,
it's a bit more complicated than just setting the target variable. You need to bring your own
C-sroot, you need to bring your own C-library for the target. And there's a lot of work that you
have to do the Zik does for you automatically. Step three, though. And here things are becoming
more interesting. The build scripts are sometimes like there's a soup. Projects have soups
of build scripts like they have a make file, but then make doesn't work on Windows. So they also
add C-nake because somebody likes C-nake. Then somebody else likes something else. Windows needs
its own batch files or whatever curse thing people do on Windows. So you have always this project
where they have sometimes they commit the autocomps stuff. Sometimes they don't, I don't know, it's a mess.
Zik has a build system integrated in the language. So you create a build a Zik file and Zik can
use that to basically do what you would do with make files. Now this is interesting because if you
do that, you remove your dependency from make C-maker all this stuff. So now the compiler is also
the build system for you. So you reduce the dependency and made your project a little bit more
multi-platform. And that's actually something that it's already being used by, I can think of WASM3
and a few other projects in that space. They have a build Zik file in their
repo. So if you have Zik, you can just run that and you're good. And that brings us to the final
step. So here you can see the maintaining it with Zik story fully complete. You have a Z
project. You keep it in Z. You don't start rewriting it right away. But when you want to add
functionality, you can create a Zik compilation unit that the Zik compiler will be able to compile.
You will be able to export C-A-B-I symbols, functions,
Ives, tracks and stuff that interoperate with everything. So it's like it's one extra compilation
unit like any other compilation, C or C++ compilation unit that you would have.
Although we are limited to the C-A-B-I, no C++ A-B-I. So let's say that Zik is more friendly towards
in that perspective. But you have your Zik compilation unit and now you can link everything
together. And we do that, for example, in the blog posts. We take Redis and implement a new
command in Zik that then we link into Redis. That's maybe not the correct way of adding comments
to Redis. But when we wrote the blog post, the perspective was of us being the maintainer of
a C-project where we don't start rewriting everything. We just add stuff as a separate compilation
unit. And if you like Zik a lot, you can, if you want, start tackling your C-project with one
compilation unit at a time, like you replace it with an equivalent Zik implementation. And so you
swap one piece at a time. And if you want over time, you can rewrite it in Z. If that's your goal.
If that's not your goal, that's perfectly fine too. Because the point is that since Zik can
compile C code. And we have maybe a compatibility. For example, there are projects out there that are
just basically packaging a C-project into a repo that has a built-up Zik file and maybe a Zik
syntax sugar layer so that you can use the Zik file that gives you, you know, nice Zik types
instead of what the C API would return to you. But the second step is not even necessary.
Even just having a build file would be amazing. And Zik would be able to use it.
Okay, sorry, before we go any further, I should probably have prefixed this part of the episode,
like the really technical deep down stuff. Before we lose the two of members of the audience
maybe we should probably clarify a couple of things. L&VM, of course, is a compiler framework.
Let's put it this way. That is our available GitHub and also has a fancy project website.
You'll find the link in the show notes. Essentially, it's comparable to the GNU compiler suite
in terms of it has a backend that is in charge of code generation for a couple of things. And then
it has a program language specific front ends for the various program languages. Rust is using
L&VM, sorry, if you invoke Rust C, which is the Rust compiler, you essentially invoke the L&VM
backend for code generation. Similar, the C-lang, or Clang that Laura's just mentioned,
would actually be the C-lang plus plus would be the C plus plus front end for C and C plus plus
program languages feed directly into L&VM. Now, Laura's the build system you mentioned,
that sounds pretty much like something called cargo for Rust. For those few people out there
listening who don't know it. No, what cargo is essentially cargo is the Rust equivalent. I'm
simplifying things here. Of the make or auto make build system for Rust. cargo can pull down
dependencies, can compile dependencies in all the rest of it. So what make and auto make and
all the GNU tool chain equivalence took about, I'm tempted to say 10, 15, 20 years to really be
user friendly. In terms of simplifying things, it only took cargo about what, 5, 10 years max.
That's my personal opinion on the whole thing. But maybe Laura's you have an opinion of yourself,
with regards to this build system that you just described in comparison for example to cargo.
Yeah, no, I think that's a fairly comparison. To be a bit more precise, cargo is also a
package manager. Correct. Yes. We don't have yet the package manager part, but
see, start working on it in like, I don't know, probably three months from now. So we want to also
have that. It's just that we are slightly, it's a bit too early. But there's one thing that cargo
cannot do, that they can do, which is compile secode. Cargo can fetch your dependencies.
It's so Rust projects can depend on secode, and they do do that. But when Rust sees, when cargo
sees that you have a seat dependency, it uses the systems compiler, the system, the
system. So in a sense, cargo cannot fully work as a, if you will, build system and package manager
for see projects. Well, they can compile and cross compile sea dependencies. So let me give you
one example of how this is critical. And by the way, what this is, if you in from this perspective,
one thing that cargo cannot do, it's not the end of the world, though, because, because you can
use zig cc from cargo. There are a couple of blog posts out there. When I wrote myself called
zig makes go cross compilation, just work. And somebody else saw my blog post and did the same
with Rust. And so there's another blog post called titled zig makes rust cross compilation
just work where basically they had this Rust project that depended on a C library. And they
configured cargo to use zig cc as the systems c compiler and c++ also. And now they were able to
cross compile. So the what going back to the package manager slash build system perspective,
the aim for the zig build system and package manager is to become a major C build system and
package manager. If you want an example of this, I'm going to share a link with you both.
There's a tweet by Mitchell Ashimoto from HaxiCorp, which recently went public. So apparently Mitchell,
I don't know, instead of enjoying the big money that comes from going public, I would assume
started packaging c application, c libraries with z.
Shifting back from technical things a little bit. If I take a look at GitHub, the code base that is
out there with regards to go lang and Rust is just overwhelming, especially the adoption of Rust
in the in the last, I'm tempted to say two years never mind the adoption of go lang.
In the last seven years has been amazing projects that are come to mind. And other are more like
system oriented projects that require a more like a low level language like C or more. I'm almost
tempted to say C++ have adopted these two languages left right and center. Where do you see zig in
this context? And if I take a look at the at the code on GitHub, there are not that many projects
out there that use dig as the main implementation language. And by the way, of course, the language
apparently is self hosted. If I'm not completely mistaken. The factor of it being quite a young
language as well, right? So. Well, true. Yes. And that's the reason why I'm asking about the
roadmap here. Yeah. So, okay, maybe, so first of all, let me acknowledge that yes, you're right.
There are not that many z packages out there yet. That is fair. It's also because in part,
there is no package manager. So you can imagine how surely it reflects the level of adoption,
not out there. But also you start having a proliferation of libraries and packages once you
start having a package manager that allows you to easily leverage them. So we don't have that yet.
So I think it's normal for these numbers to not be exploding yet. We'll see after we publish the
package manager. What happens now? Okay. So this is libraries on GitHub. As for the language itself
being self-hosting. So the language at the moment is not self-hosted yet. Sure. But we are about to.
That's the current main piece of work that we are doing right now. Long story short,
Z is implemented in C++. But if we like C++, we wouldn't be doing Z. So we are trying to replace
the current implementation in C++ with that self-hosted implementation. These are false
implementations. Aside from being more to our taste, has a couple of interesting aspects to it.
One is that it's going to be considerably faster than the current implementation. Z is not that slow
at compiling. But the new self-hosted implementation is really designed to be much faster. It implements
many of the data-oriented tricks in case people have heard this term. It's like just techniques to
make your stuff go fast. And on top of that, we also want to implement incremental compilation
with basically, let's say, a new way of doing incremental compilation. There should be
also allow, it should also allow us to basically do rebuilds of arbitrarily big projects in less
than a millisecond. So the idea is you have a big project. You've compiled it once. Obviously,
the bigger the project, the more it takes to compile it. There's no escape from that. But you have
this giant project. Let's say it's, I don't know, Chrome or Zig Chrome. And you change one file,
one definition somewhere. Recompiling the project after that one change should be basically
instantaneous. That's what we aim for. And there are a lot of tricks that are necessary to get there.
So this is the self-hosted work that we're doing right now. I'm personally working on implementing
the doc system for the self-hosted compiler. That's what I'm working on right now. So the thing that
basically generates documentation automatically for Zig projects. But it will take a while before
all this stuff is complete. So as I was saying, I don't know, three or four months, something like
this, after that Zig will be self-hosted. Interesting. So with regards to the overall ecosystem,
you have a foundation in place for enough. So does Rust. So does, I'm almost tempted to say
go along, but we have this kind of tiny search engine brand go. So that's for me, an effort,
an effort, a compression. Are you sure to go as a foundation? No, that's what I'm saying,
but it has a search engine backing it. I will think one thing though. The Rust foundation is
very different from the Z software foundation. Do you want me to go into the lily's?
By all means, just go ahead. So Zig is a 503 non-profit foundation.
Sorry, 501 C3. While Rust is a 501 C6. So these letters, 501 C3, 501 C6, these are like,
it's a pointer, if you will, into the specific paragraph and the line inside
some kind of American legal document that defines. For the two people in the audience who are not
American text lawyers, lots of course referring to the text legislation in the US with regards to
non-profits. Yeah, this may be the show notes. Good luck finding them. I don't even know where to start.
I guess you can go to the side, but the point is, the point is, 501 C6, 501 C3. Now,
this is a tiny number of the changes, but a 501 C3, it's a non-profit foundation that can accept
donations. A 501 C6 cannot accept donations. So, not even the ones under the table.
I mean, you mean a lot being. Joking laws, I'm joking.
So they cannot accept donations. So the rest of the donation is not allowed to accept donations.
The only thing that they can do, well, I guess they can do work, just like the Z-Soft Reformation,
can do work and being paid for work. But the last foundation, basically, the way they get money
is by having member companies pay a fee. So in some ways, they are more like a consortium.
I think that here in Europe, we would think of that type of organization as a consortium.
So they are a group of companies with a shared interest. Companies pay a fee to
getting to the foundation, and that's it. One interesting side effect of this is that the Z-Soft
Reformation is paying its developers. I am being paid by the Z-Soft Reformation to work full
time on Z, and so are a couple more people. At the REST Foundation, nobody is paid to work on REST,
except maybe a couple of people who have administrative tasks. So the developers are not paid to work on REST.
I think the fundamental difference is, similar to Linux, the people on the foundation,
I'm part of different companies who are just chipping in with regards to making the project work,
whereas Zix seem to be different, apparently, in that case.
Yeah. Okay. Yes. Also because there are sometimes, I think, some interesting conflicts of interest,
I think, when you have the second approach, the one where you have companies, sorry,
the first approach is to say, the one where you have companies basically higher your court
contributors, because on one hand you have this, if you will, natural misalignment of incentives,
where companies paying these people to work on their stuff, and secondly to work on REST,
or the other open source project, whatever that is. But it's not just that. One thing that
happened recently with the REST Foundation, which I found not very nice, was that REST had an
executive director that was somebody from the REST project itself. They had been there for,
had been there for a long time. And basically, this person was, was the executive director
at Interim, so only temporarily, while they were searching for somebody to take the position
full time, but it basically never renewed her contract after it expired the first time.
And the foundation remained without an executive director for something like six months or something
like that. And in the meantime, when you don't have an executive director, the highest authority
is the president of the board of directors, who was the, the person in charge of the REST
team at AWS. So AWS basically, it's one of the biggest member companies. They have a bunch of
board seats. They have the executive, they're sorry, the president, the chairwoman of the
board of directors at the REST Foundation, and they also employ a good chunk of the key
developers of the REST project. And I don't know. I think that when you have an external organization,
whoever that is, it, for me, it's very easy to hate on AWS. But whatever the company is,
even if it's not a company, you know, where, where they ask employees to be in bottles,
even if it's a much nicer company, it's still a problem in my opinion. So one thing that we do in
the self-reformation is that we know upfront, we are never going to give board seats to any big
that company period. Okay, interesting. Okay.
Although now you might say, well, okay, then how do you guys ever expect, ever expect to become
big? That's an interesting thing. Well, what is the, I guess, what is the objective, but
just to go? Yeah, I mean, you mentioned the donations. So these are sort of no strings attached,
donations to the project, is that right? Yeah, correct. And then the second question that
follows on from now is, you know, obviously the people like yourself and people developing
their language, how do they earn their bread on the table? That's put it that way, right?
This is where, you know, organizations that sponsor Rust programmers that helps the,
or any open source project helps the project move along, right? So that's, if in your case,
it's mainly done on the voluntary basis or as a sideline, then you can perhaps imagine it
will take longer to take off, is that fair to say? Or how do you see that? Yeah, so I think that from
my, from the development, the velocity perspective, I don't think that not having a big company
sponsor Rust makes much more difference. I think it does make a gigantic difference more
from a marketing perspective, because even though, for example, Rust deserves, I think,
to be regarded as a very interesting new language and absolutely innovative when it comes to
the borrow checker, et cetera. Well, I mean, you can also see that, especially now that AWS
is in charge, there's a lot of marketing money being spent into Rust stuff, like the hype,
level is pretty high, and marketing money is being invested into, you know, keeping the
temperature high. In some ways, if you argue the same about Go, I don't know precisely
how much marketing investment that has been in Go, but, you know, the fact that Google uses it,
and then once it starts being used for one big project, then, and the fact that it's
baked by Google, then that all stuff that helps, for sure. For Z, when it comes to paying
for contributors, it works this way. We have three contributors that work full-time,
in our pay-to-work full-time. I'm one, another one is Jacob Conka, who left Microsoft to basically
work on a in-house linker that we are using in Z. I won't get too much into detail, but the idea
of course, compiling, like, making a program, compiling a program on Windows for macOS, it's not
intriguing, and especially with the new macOS, is that came out, there was no linker able to do that,
and so Jacob started working on this stuff. But, aside from these technicalities,
and the third person, of course, is Andrew. Our three are the full-time contributors right now.
Then there is a group of about, let's say, 10 people who are not working full-time, but who have
contracts where they are allowed to build hours to the software formation. So they do some work,
and they are allowed to build a few hours every week. I don't remember the precise details,
but you can think of it as, like, lower than part-time, something like this.
These are pretty safe. Obviously, the more donations we get, the more people we would like to bring
on board to work full-time. But, the general idea is that we would want to always stay small,
like a tiny organization, no overhead as much as we can, so that we can stay tiny, and more
importantly, that we don't end up, like, depending too much on one donor, on one big company,
something like this. We don't want to end up, like, Mozilla, who, at one point, had to fire a bunch
of very good people just because they end up, just because then one deal that they had with Google
ended up not being renewed, and there was a disaster. From a marketing perspective,
obviously, yeah, not having a big company in your border direct towards its stuff, because
well, they have money, and money is easily translatable into marketing muscle.
I don't know, you can have a ZIG conference organized and entirely paid by this giant company,
and that surely helps. We're not going to have that, but at the same time, I think that we are
solving problems that are interesting enough, that people have started to notice. I showed you earlier
a tweet from Mitchell Hashimoto, but we started, for example, recently getting being paid to do
offer a support contract to Uber, where they started basically to use the ZIG CC to cross-compile
some stuff on their end, and they wanted us to fix some corner cases with, like, old Linux
G-lib C versions and stuff like this. And I think that, if we play our cards right,
for example, I'm not really being paid to work on ZIG the compiler. I do that as well,
but my job is more marketing focused. So if you look for ZIG on Hacker News, you will find a good
number of things that I've written in the path that has reached the front page. I'm not the only one,
but this is part of our strategy. So we are more, I don't know, guerrilla style marketing,
you will, which is an interesting question. And of course, the links will be in the show notes
with regards to the stuff that Laura has just mentioned.
Laura, if I take a look at this spreadsheet, I see quite a few companies
outside the realm of the user's aspects that have picked up on ZIG. But of course, that pays with
regards to the Google stuff of the world and the musilas of the world and the Microsoft world.
I mean, there was a statement last year, what was it before? I can't remember where somebody from,
officially for Microsoft said that in a nutshell, I'm simplifying things, of course,
that Rust basically will be the next C++ at Microsoft in terms of, it's that, it's that
analogy stack that will be replacing the workhorse that has served Microsoft for at least 10 to 15
years as the main implementation language for office software for some other quite interesting
stuff over the years. Where do you see this in terms of the overall interesting adoption going
for ZIG? That's a good question. I don't have, so I didn't know about this,
Microsoft stuff, it doesn't surprise me, it kind of makes sense. I can tell you that my
knee-jerk reaction is, I don't honestly care which language they use to implement ads in my
start menu, so I'm kind of jaded when it comes to Microsoft specifically, but this is not about
Rust, this is about Microsoft specifically. But if you want another example, another recent example,
where Rust started being adopted by an important project, and actually in this one ZIG apparently
was in the race too, but we lost two Rust in a sense, if you will, is Ruby. There was a discussion
in the Ruby forum discussions with the creator, Mats, where they were discussing re-implementing
the component of the compiler, the GIT part of the compiler from C to either Rust or ZIG, and
they were, and then the contributors were asking the Mats, the owner of the project, if it was fine
to use Rust or Z, and they may end up choosing Rust. So that's fine too. Honestly, from that
perspective, I think that Rust and ZIG are different enough that people that would want to choose
Rust should choose, and they really like Rust, they are not going to be happier by choosing ZIG.
I do think that there are a lot of people though out there who would not be super happy to use Rust,
and that would be happier to use ZIG. In interesting perspective, taking a step back now,
if I take a look at the ecosystem, starting, for example, with Python, Python has been run for
the last 30 years, Golan has been run for 15, 17 years, some of that, Rust has been run for 10 years
plus, give or take. When I take a look at the crates that I owe ecosystem, it reminds me of
PyPy, as in the Python package index, that took in terms of functionality and packages
overall available for any purpose, parsing websites, anything basically. If I take a look at Rust,
I'm tempted to say that it took the Rust community about 10 to 11 years to get to the point
that the Python community took over 25 years to get there. If I take a look at the ZIG ecosystem,
I don't think it's quite there yet. Okay, fair enough, you have been run for seven years,
so it takes a while to build an ecosystem. But as far as I'm concerned, actually, a language
and the adoption of a language, or text, in general, lives by the ecosystem as such,
where do you see ZIG going in terms of our community adoption, especially when it comes down to
the module ecosystem? I can tell you very easily how we're going to do much better than Rust.
So here's the idea. Rust is a fuzzy language in a sense. So fuzzy is in
because when you're using Rust, if you want to make good use of all the things that Rust gives you,
you cannot really, you don't really want to jump into C code, do you? Because C isn't safe,
right? And you have to close everything in and save brackets and it makes
interpretation hard. In ZIG, we're not that fuzzy. In ZIG, we don't mind bitfiddling. We don't like
on the fine behavior. So some C stuff maybe won't compile correctly. ZIG, by the way,
compiles everything with on the fine behavior sanitization. So not every C library can be used
right away, but the ones that don't have on the fine behavior in them can be used. And we are not
as picky as Rust. Surely we would prefer as implementation over a simple implementation of
something, but there is less of an like impedance mismatch between ZIG and C than it is between
Rust and C. So long story short, from ZIG, you can make use much more easily of 40 years of C libraries.
And for this, this is how it's going to start. The start is not going to be, let's say,
re-implement everything in ZIG. The start is going to be, let's package already good C libraries
that have been out there since forever. They are basically currently being used everywhere.
There are like critical infrastructure of modern technology. Let's re-pack it up from ZIG so
that we can use it more easily. And boom, now you have everything. It won't necessarily work in
every single case, but the point is we are not rejecting existing C libraries. We are embracing them.
And it's much more easy to just fix the build script so that it uses Build.ZIG of an
existing C libraries than it is to library, than it is to re-implement it from scratch.
Interesting perspective, especially from, okay, full distortion, I'm a little bit of Rust
hand, but for enough, apparently we both share that passion to some extent, Laura, but let me take a
look at it from a Rust perspective. Rust gives you, I'm tempted to say a very low technical depth.
In terms of if you can convince the Rust compiler to generate code, the QA phase in terms of
fixing bugs and especially when it comes on to memory stuff is pretty short. See on the other
hand, you just go ahead. If you want to shoot yourself on the foot, that's fine. Now I see ZIG,
if I understand the language correctly, somewhere in the middle, you can do a lot of things that
you can do in C, and what you just said confirms this to a certain extent, if you want to reuse
C libraries, but Rust is explicitly on the other hand basically tells you, sorry, you have to know
what you're doing in terms of if you're using the answer of Crate, you better know what the implications
are, because normally, and that especially goes for the ecosystem that is out there for us,
you are bound to save code, and so combining the Crates, and this is very similar to Python
these days when our program Rust, first of all, I'm going to take a look at Crates and I owe to see
what's out there. Similar, if I want to do a code based in Python, I'm normally checking out the
Python Package Index, because most of the time, and that goes for Rust and Python, I simply end
up writing glue code, but if I check out Rust in terms of a stick to Rust, once I basically have
my cargo definition file, as in cargo.tomel done, which is, I'm simplifying things in the
equivalent of a make file for C, the Rust compiler basically, because we're also talking about
save code, guarantees me a short turnaround times in terms of debugging, especially when it comes
on to memory issues. Now, where do you see this total cost of ownership, especially with the gods,
to technical depth going in terms of zik adoption? Yeah, if that makes any sense. It does.
That's definitely an open question, and obviously, Rust makes a very good,
makes a very good proposition when it comes to safety, and ultimately, I agree with you.
The ultimate point is, what is the total cost of ownership?
Let me ask you a counter question, but I would like to reiterate, I do believe that Rust is making
a good offer, so I don't want to dismiss that. That said, which one would you prefer? Also,
from a perspective, maybe of ease of use, being able to just import a Rust
crate into your Rust project is obviously super easy, but from a perspective of total cost of ownership,
or the risk of bugs, you mentioned risk of issues with memory management, but memory management
is one source of bugs. There are also many other ones. Of course, would you trust more
using a newly minted Rust crate, that basically is a re-implementation of...
Curl, that's what I wanted. Curl, yes. From the perspective of total cost of ownership and bugs,
yes, Rust covers memory bugs, memory usage bugs beautifully, but those are just one source of bugs.
So, which one would you prefer? A newly minted crate that is a re-implementation of Curl,
or Curl itself? Because Curl itself is surely... it's a C project with all the...
the inner that comes with that, but at the same time, it's very, very battle-tested.
So, which one would you prefer?
Interesting question there. I'll go for the original curl.
I would take a look at the guitar. Issues page, yes.
No, total sight, Laura. That's a tough one.
I would probably take a look at the adoption figures of Craitorio to see who's using this newly minted
Curl implementation. To see what's happening. I don't know. Give it a half a year, but for the
meantime, I probably would be... I'm reluctant to say this. But I would concur with Martin, yes.
So, my answer is code. It is. It is answer code, yes. But at the end of the day, my point is that
there's a lot of good outcomes from Rust, but it's unclear to me that is the ultimate silver bullet
when it comes to total ownership cost of something. And I don't believe that throwing
immediately in the trash 40 years of C code is the right choice. I'm being a bit too extreme here,
maybe, because it's on with you. Yes. Rust can intervene if we see. But I think that more in general,
especially for domains where memory management is not that complicated, while other sources of bugs
are really more the problem, like I don't know, distributed systems. Memory management,
most of the time, is not complicated, like you have a request, and memory has to leave
for as long as the request survives, and you can do that with an arena locator is super easy.
The problem, though, is that in distributed systems, you have a bunch of problems that come from
the nature of distributed systems. And those are bugs where Rust can help you to some degree,
but not 100%. And again, not to dismiss Rust. Rust is amazing. This is all good. The point is,
it's not the ultimate growth that nobody ever will able to agree. Yes, absolutely.
Because that hasn't been invented yet. Exactly. Now, I mean, jokes aside, Laura, I mean,
these three languages, and GoLang goes along the same line to some extent, are targeting one
specific area, namely system languages, for system-oriented programming.
Zika is in that area of C, C, this is where C comes from, Udings was implemented in C,
and that's exactly what Mozilla had in mind, when they more than 10 years ago,
but took a very serious look at something called Rust. A system language designed for
system-specific things. And if you take a look at the crates that are out there, much of the
stuff is actually targeting a system programming, goes without saying, like the one you just mentioned,
like curl. Yeah. So, I think that the idea of packaging curl is a stocking point, and then maybe
slowly over time, after you have come to an understanding of how you think it can be improved,
because I think that rewriting without improving the interface, it's a,
well, maybe it's not the best use of time. Let's just, let me just put it that way. So,
the plan is to have people just reuse what's already over there, that's already pretty good,
and then only rewrite once you know how to improve on the original interface, on the original APIs
and stuff. Okay. Yes. You're listening now to the additive version of this episode. The original
version went about for four hours. We went into the, you know, the compatibility details, but this,
of course, has been edited out. You may find the original version on something called Linus
in Laws.eu, but jokes aside, no lawyers, let's wrap this up. It has to be more than interesting
to, here, here you perspective on things, especially where you see this going. There is, if
you've listened to a couple of episodes, there's something called The Poxes of the Week,
where we simply discuss things outside the topic of the current episode as an ending goes.
The pox basically are about things that you think worth mentioning, like books Martin normally
refers to movies, especially his dark habits and some other stuff, like designer rock since
and so forth, but really anything goes. So, Laura, what is your pick of the week also known as a pox?
Let me think.
Oh, man, I don't know. I can only think about what I knew for the pox.
The pox on the spot, okay. But why didn't you go first, Chris?
You see, I'm almost happy to say, my new vice as in the TV series from the 18s.
I've just just got a lot of ideas for them all. It's a little more, I'm just okay.
No, I just decided. I've just discovered this recently and I used to watch this left run
in the 20s and it brings back fun memories, but without the fire, it's Martin, what's your pox?
That's a good question. I'll have to have a think as well. I don't think anything specific.
You have about 10 seconds.
So, if we talk about movies, I watch this week and I rewatch this week and the original
lot of the ring of the ring's trilogy and it was nice. I don't understand, though,
why certain phrases became memes? Like, they are taking the hobbits to
Isengard. Why? Why that phrase became so much of a meme that they made songs with it?
Did it? Okay. Yeah, there were like YouTube videos which basically this sentence
repeated as part of a song, but that was only one, right? Also, the other one, you don't simply
walk into Mordor, something like this. It goes to show Laura's that you're about 30 years younger,
than Martin and myself are. Oh, I'm sure you're not going to get any letters.
Give her a take if you had any way.
Okay. One does not simply walk into Mordor. I think there has been memes so many times.
I can't even count how many have so I've seen of those.
But yeah, anyway, it shows that I guess intercultural culture has changed from that time to today
because nowadays I don't know. In some ways, the memes seem weirder. The movie's worse,
but the memes are at least more relatable, I think, than in the past. I never understood them.
The past ones. Okay. Martin. Okay. Since we're sticking with
movies, I'll go with a movie called Land of the Blind, which is I watched at the weekend.
It's from 2007. It's a BBC production.
I don't think so. It was part of the show. In that, it's basically about someone
overthrowing a dictator with a revolution, and then the revolution becomes the new dictator.
Which is even worse than the original dictator. So it's kind of, you know, your enemy really is
this moral. Okay. To the modern world, like, back number one for a McSyriot and McSyriot
Joshua Worth, up purely, what's the word I'm looking for, incidental? Coincidental?
Inspiration, whatever.
Jokes aside. No, links may be in the show notes.
Loris, that has been more than inspiring.
Thank you for taking the time. Actually, what we missed is, if people want to become involved in ZIG,
yes, the club. Let's go ahead. How can people help? How can people help?
People can help, I think, in three ways. One, by contributing code, if that's what I like to do,
because it's an open source project, you can go to github.com slash ZIGLANG, and you will find
our organization with repositories, and we have weekly meetings to help people contribute to
the language. Number two is, of course, donating money. We have a github sponsors page,
still on github. Also, on the website, there's a big link at the top. So if you go to ZIGLANG.com
or at the top, there's a big link that tells you how to sponsor the ZIG software foundation.
I think it's also an interesting page to read, because it explains how the organization works,
even if you don't plan to donate. Number three, and this is actually my favorite, you can contribute,
just by paying attention, because all these things that happen in open source,
and how open source organizations interact with one another, having people see what's happening,
really can make a difference. When nobody's watching, organizations, open source organizations
can behave in ways that you wouldn't expect from an open source organization. Recent events
in the dotnet foundation, for example, are relevant to this point. And more in general,
knowing what we are doing helps us, you know, helps us also protect ourselves from people
misinterpreting, deliberately or not, our intentions and actions. So that's my favorite.
Great. Last question for my side-law is, what is the license for ZIGLANG?
What is a liberal one like Apache or MIT or something?
Good question. Yes, it's MIT. MIT, you're the first people. It's a very liberal
license. So you can take the source code and do pretty much whatever you want with it.
Yeah, and it's deliberately non-GPL, like it's deliberately non-complicated for companies,
let's just say. Yes. People, this is a non-communist license, of course, because it's not GPL,
as it's not part of the GPL license family, but that's okay. We do make exceptions on this podcast.
Well, that's a very complicated story, maybe for another episode.
People, the lyrics in laws is. Is the is the go-to source for the episode list?
Pick and choose your episodes with regards to communism. We do have a five-year plan.
There are regular cadence updates on the podcast, how we do it with our five-year plan. Yes,
exactly. And don't forget to check out the dark side, just in case. But enough plugs.
Lawrence, thanks again for being here. I hope to have you back soon for an update on Zik
and all the best with the project. Thank you. It's a pleasure. This is the Linux in laws.
You come for the knowledge. But stay for the madness. Thank you for listening.
This podcast is licensed under the latest version of the creative comments license.
Type attribution share like credits for the intro music go to blue zero stirs for the song
summit market to twin flames for their peace called the flow used for the segment intros.
And finally to the lesser ground for the songs we just use by the dark side. You find these
and other dd's licensed under cc achamando or website dedicated to liberate the music industry
from choking copyright legislation and other crap concepts.
In the Zik community we start calling this stuff like that's a Linux moment.
Uh when you're using Linux and like your mic doesn't work or your screen share doesn't work.
And it's a little moment. Have you copyrighted this term because it'll be in an hour?
I'm joking.
You've been listening to hacker public radio at hackerpublicradio.org.
Today's show was contributed by an hbr listener like yourself.
If you ever thought of recording a podcast then click on our contribute link to find out
how easy it really is. Hosting for hbr is kindly provided by an honesthost.com.
The internet archive and our sync.net unless otherwise stated today's show is released under
creative comments, attribution, share-like, dd's o-license.