Thank you.
Hi, everyone here, me.
Great.
So, thank you everyone for waiting.
Good morning.
So, today I'm so excited to give you a quick talk about Humbru on on 64 Linux.
Yep.
So, let me begin by introducing myself.
My name is Roe U, and I'm currently a computer science student at School of Computing,
and University of Singapore, and I specialize in income security.
And I've been a Humbru user since I bought my first Mac in 2021.
And before I even got my first Mac, I bought the Raspberry Pi 4 in 2020,
which as we know has a little arm-based CPU on it.
I became a Humbru maintainer since 2023,
and ever since I became a Humbru maintainer,
I've always been really tempted to install Humbru on it.
One second.
Yep, great.
So, a quick introduction for those who need a little bit more of background.
Humbru is a package manager for Mac OS and Linux,
and currently supports Mac OS on both Intel and Apple Silicon architectures.
And, although immediately, its primary user base is Mac users.
Last year, first them, I was still quite surprised to find out that a lot of our users don't actually know
that Humbru also supports Linux, it's called Linux Brew,
or most specifically, X8664 Linux.
And now here, you may notice that I didn't mention our main topic today,
which is ARM64 Linux,
and that is because this platform is not officially supported by Humbru at the moment.
Okay, but now you may ask,
why do I want to run Humbru on ARM64 Linux anyway,
if it's not officially supported?
Well, for me, speaking from a user's perspective,
I guess we can just remove the ARM64 from the question,
and ask, why do I want to use Humbru on Linux?
Because if you already have a reason to use Humbru on your Linux machine,
which may not necessarily be ARM64 based,
the same reason probably also applies to ARM64 Linux.
Firstly, you can install up-to-date software packages that may not be available from your distro package manager,
because most Humbru packages are kept up-to-date with upstream releases.
Secondly, you can use it to install software packages without rude privileges,
which may be useful if you're on a shared machine like on a server.
Or you could just be a fan of Humbru,
and want to use it everywhere I like to,
because I mean, why use something you don't like,
and why don't you, why not use something you like.
So cool, now that we have the motivation,
but how do we make it possible to run Humbru on a platform?
Well, the first thing we need to do is have the prerequisites available.
You can find more about this on our documentation website,
but basically here, that boils down to these important things.
Firstly, curl and get which are used by Humbru to make network requests,
and to keep itself up-to-date.
Build tools that enable us to build software from source,
like make and GCC, because as we'll see later,
we do need to build some software from source.
And most importantly here, so for those of you who don't know,
Humbru is written in Ruby, we also need a Ruby runtime.
So on most Linux systems, the first two are usually either present,
or easily installable, like if you're on a dead end or one two,
you can just do App install, curl, get, build essential, and that's it.
The tricky thing is Ruby, which may not be as straightforward,
because it's not as simple as to do App install Ruby.
Since Ruby needs a very recent version of Ruby,
and its Ruby version requirement now closely follows Ruby's release cycle.
So on most systems to keep up with that,
it's likely that we will need to build Ruby from source,
probably using a Ruby version manager, like RPN, like I used to do.
Now for the officially supported platforms,
we save our users from this trouble by providing what we call portable Ruby.
portable Ruby is our custom self-contained build of Ruby.
That is the sign to be installed and run anywhere on the file system for its internal use.
So we build and distribute portable Ruby for all our supported platforms.
And since ARM64 Linux is not among them, it's not an officially supported platform.
We haven't been able to build portable Ruby for it.
But the good news is, thanks to GitHub's recent rollout of ARM64 Linux,
we now have the capability to build portable Ruby for ARM64 Linux,
and we expect to ship it in the next release of home-ruz portable Ruby in the near future.
Okay, great.
So now we have cleared the prerequisites.
Does that mean that we can expect to see a fully functional home-ruz on ARM64 Linux?
The answer is yes and no.
So the good news is that indeed, you should be able to use home-ruz,
mostly without issues like I have been doing this for quite a while already.
However, one significant downside is that due to its unsupported status.
What does this unsupported status even mean?
It means that no rebuild binary packages or in home-ruz terminology photos are available.
And that means you have to install every single package that you use from source,
creating essentially a home-ruz scratch experience,
which, admittedly, isn't that great?
Not only that, it's very possible that you encounter build problems due to complexities and software environments.
And by this, I mean that differences in compiler version, dependency version,
installation directory, in other words, how you install home-ruz and where install it, et cetera,
can all affect the build behavior.
And it's very hard to make sure that every single package install in the exact same manner despite those differences.
So even for the supported platforms, we still receive a lot of user issues complaining that building from source does not work.
But unfortunately, that's like we cannot help to fix every single one of them.
So maybe building from source work for your last week, but it's not working today, we can never tell.
And despite that, if you have an idea how to fix those issues, we welcome poor requests that improve the robustness of our package build scripts,
as long as the fix is reasonable, like it's not carrying a 10,000 line of patch for review, that's okay.
So since we don't have the bottles, or in other words, pre-built binary packages for the platform, what's needed to make them available?
So the first thing to make sure that the pre-built binary packages work for every system setup,
perhaps the biggest thing is to make it possible to bootstrap, let's see, on every system, on Linux or new Linux.
Homebrews bottles are created in its CI environment, which is relatively new.
Currently, it's on 1222.04, which provides ClipC2.35.
So building stops against such a comparatively new ClipC means that the binaries may not work on older systems, on systems with an older version of ClipC,
because ClipC does not offer forward compatibility.
In Homebrew, this problem is solved by automatically installing its own managed version of ClipC that matches the CI version,
and when the system ClipC is older, this step is done automatically.
And to make sure this works everywhere, we will need to support bootstraping that version of ClipC, meaning to be able to build it from source on every system we like to support.
If you like to read more about that, you are free to consult our documentation website.
But that said, such technical hurdles are not the biggest reasons why Homebrew does not officially support it and why the bottles are not there yet.
The biggest challenge is to build and test every single package for the new platform, which requires more CI capacity than what we have right now,
and likely even more maintainer efforts to fix issues.
This is something we will revisit later, but with limited demand and both human and machine resources, the safest bet I can make for today is to say that it's not planned yet, but still, it may or may not eventually happen, and we will see.
So yeah, with that said, what's next, at least currently, while Homebrew on ARM 64 links, it's still not officially supported, and it's not something that we promote officially.
It's already very much possible. Here I wouldn't use the word usable, because it depends on whether you're enthusiastic enough, or maybe bored enough, to build your packages from source.
So we have continuously working to improve its experience, and here I'd like to give a special shout out to Bo Anderson over here, who's been doing a lot of great work.
Yeah, we have been continuously working to improve the experience, but to be safe, just as I said, please don't expect to have official first class support like 64bit x66 in the next or macOS anytime soon.
It's something we're interested in, and we'll be discussed about soon, but we may disappoint you, so please don't have high expectations on this.
Nevertheless, if you decide to try out Homebrew on ARM 64 links and have issues with it, you can use our discussion forum on GitHub, or even better, submit a poll request to propose a fix or an improvement.
After all, we are an open source of reproject, and it's the thousands of contributors like you that keep our project alive.
So with that, thank you for your time, I hope you have a great day and enjoy your first time, and I'll be here around to take questions, and please do come to us then at building K, and we look forward to having a discussion with you.
Thank you.