WEBVTT

00:00.000 --> 00:05.000
Thank you.

00:05.000 --> 00:09.000
Thank you.

00:09.000 --> 00:12.000
Hi, everyone here, me.

00:12.000 --> 00:13.000
Great.

00:13.000 --> 00:15.000
So, thank you everyone for waiting.

00:15.000 --> 00:16.000
Good morning.

00:16.000 --> 00:21.000
So, today I'm so excited to give you a quick talk about Humbru on on 64 Linux.

00:21.000 --> 00:22.000
Yep.

00:22.000 --> 00:25.000
So, let me begin by introducing myself.

00:25.000 --> 00:29.000
My name is Roe U, and I'm currently a computer science student at School of Computing,

00:29.000 --> 00:33.000
and University of Singapore, and I specialize in income security.

00:33.000 --> 00:37.000
And I've been a Humbru user since I bought my first Mac in 2021.

00:37.000 --> 00:44.000
And before I even got my first Mac, I bought the Raspberry Pi 4 in 2020,

00:44.000 --> 00:48.000
which as we know has a little arm-based CPU on it.

00:48.000 --> 00:50.000
I became a Humbru maintainer since 2023,

00:50.000 --> 00:52.000
and ever since I became a Humbru maintainer,

00:52.000 --> 00:56.000
I've always been really tempted to install Humbru on it.

00:56.000 --> 01:00.000
One second.

01:00.000 --> 01:02.000
Yep, great.

01:02.000 --> 01:06.000
So, a quick introduction for those who need a little bit more of background.

01:06.000 --> 01:09.000
Humbru is a package manager for Mac OS and Linux,

01:09.000 --> 01:14.000
and currently supports Mac OS on both Intel and Apple Silicon architectures.

01:14.000 --> 01:17.000
And, although immediately, its primary user base is Mac users.

01:17.000 --> 01:23.000
Last year, first them, I was still quite surprised to find out that a lot of our users don't actually know

01:23.000 --> 01:27.000
that Humbru also supports Linux, it's called Linux Brew,

01:27.000 --> 01:31.000
or most specifically, X8664 Linux.

01:31.000 --> 01:35.000
And now here, you may notice that I didn't mention our main topic today,

01:35.000 --> 01:37.000
which is ARM64 Linux,

01:37.000 --> 01:42.000
and that is because this platform is not officially supported by Humbru at the moment.

01:42.000 --> 01:44.000
Okay, but now you may ask,

01:44.000 --> 01:47.000
why do I want to run Humbru on ARM64 Linux anyway,

01:47.000 --> 01:49.000
if it's not officially supported?

01:49.000 --> 01:53.000
Well, for me, speaking from a user's perspective,

01:53.000 --> 01:56.000
I guess we can just remove the ARM64 from the question,

01:56.000 --> 02:00.000
and ask, why do I want to use Humbru on Linux?

02:00.000 --> 02:03.000
Because if you already have a reason to use Humbru on your Linux machine,

02:03.000 --> 02:07.000
which may not necessarily be ARM64 based,

02:07.000 --> 02:10.000
the same reason probably also applies to ARM64 Linux.

02:10.000 --> 02:17.000
Firstly, you can install up-to-date software packages that may not be available from your distro package manager,

02:17.000 --> 02:22.000
because most Humbru packages are kept up-to-date with upstream releases.

02:22.000 --> 02:27.000
Secondly, you can use it to install software packages without rude privileges,

02:27.000 --> 02:31.000
which may be useful if you're on a shared machine like on a server.

02:31.000 --> 02:33.000
Or you could just be a fan of Humbru,

02:33.000 --> 02:35.000
and want to use it everywhere I like to,

02:35.000 --> 02:38.000
because I mean, why use something you don't like,

02:38.000 --> 02:41.000
and why don't you, why not use something you like.

02:41.000 --> 02:44.000
So cool, now that we have the motivation,

02:44.000 --> 02:48.000
but how do we make it possible to run Humbru on a platform?

02:48.000 --> 02:52.000
Well, the first thing we need to do is have the prerequisites available.

02:52.000 --> 02:55.000
You can find more about this on our documentation website,

02:55.000 --> 02:59.000
but basically here, that boils down to these important things.

02:59.000 --> 03:03.000
Firstly, curl and get which are used by Humbru to make network requests,

03:03.000 --> 03:05.000
and to keep itself up-to-date.

03:05.000 --> 03:08.000
Build tools that enable us to build software from source,

03:08.000 --> 03:11.000
like make and GCC, because as we'll see later,

03:11.000 --> 03:13.000
we do need to build some software from source.

03:14.000 --> 03:18.000
And most importantly here, so for those of you who don't know,

03:18.000 --> 03:22.000
Humbru is written in Ruby, we also need a Ruby runtime.

03:22.000 --> 03:26.000
So on most Linux systems, the first two are usually either present,

03:26.000 --> 03:30.000
or easily installable, like if you're on a dead end or one two,

03:30.000 --> 03:35.000
you can just do App install, curl, get, build essential, and that's it.

03:35.000 --> 03:39.000
The tricky thing is Ruby, which may not be as straightforward,

03:39.000 --> 03:43.000
because it's not as simple as to do App install Ruby.

03:43.000 --> 03:46.000
Since Ruby needs a very recent version of Ruby,

03:46.000 --> 03:51.000
and its Ruby version requirement now closely follows Ruby's release cycle.

03:51.000 --> 03:53.000
So on most systems to keep up with that,

03:53.000 --> 03:56.000
it's likely that we will need to build Ruby from source,

03:56.000 --> 04:01.000
probably using a Ruby version manager, like RPN, like I used to do.

04:01.000 --> 04:03.000
Now for the officially supported platforms,

04:03.000 --> 04:08.000
we save our users from this trouble by providing what we call portable Ruby.

04:09.000 --> 04:13.000
portable Ruby is our custom self-contained build of Ruby.

04:13.000 --> 04:18.000
That is the sign to be installed and run anywhere on the file system for its internal use.

04:18.000 --> 04:23.000
So we build and distribute portable Ruby for all our supported platforms.

04:23.000 --> 04:28.000
And since ARM64 Linux is not among them, it's not an officially supported platform.

04:28.000 --> 04:32.000
We haven't been able to build portable Ruby for it.

04:32.000 --> 04:37.000
But the good news is, thanks to GitHub's recent rollout of ARM64 Linux,

04:37.000 --> 04:42.000
we now have the capability to build portable Ruby for ARM64 Linux,

04:42.000 --> 04:49.000
and we expect to ship it in the next release of home-ruz portable Ruby in the near future.

04:49.000 --> 04:51.000
Okay, great.

04:51.000 --> 04:53.000
So now we have cleared the prerequisites.

04:53.000 --> 04:58.000
Does that mean that we can expect to see a fully functional home-ruz on ARM64 Linux?

04:58.000 --> 05:00.000
The answer is yes and no.

05:00.000 --> 05:05.000
So the good news is that indeed, you should be able to use home-ruz,

05:05.000 --> 05:10.000
mostly without issues like I have been doing this for quite a while already.

05:10.000 --> 05:15.000
However, one significant downside is that due to its unsupported status.

05:15.000 --> 05:17.000
What does this unsupported status even mean?

05:17.000 --> 05:24.000
It means that no rebuild binary packages or in home-ruz terminology photos are available.

05:24.000 --> 05:28.000
And that means you have to install every single package that you use from source,

05:28.000 --> 05:33.000
creating essentially a home-ruz scratch experience,

05:33.000 --> 05:35.000
which, admittedly, isn't that great?

05:35.000 --> 05:41.000
Not only that, it's very possible that you encounter build problems due to complexities and software environments.

05:41.000 --> 05:47.000
And by this, I mean that differences in compiler version, dependency version,

05:47.000 --> 05:52.000
installation directory, in other words, how you install home-ruz and where install it, et cetera,

05:52.000 --> 05:54.000
can all affect the build behavior.

05:54.000 --> 06:01.000
And it's very hard to make sure that every single package install in the exact same manner despite those differences.

06:02.000 --> 06:08.000
So even for the supported platforms, we still receive a lot of user issues complaining that building from source does not work.

06:08.000 --> 06:12.000
But unfortunately, that's like we cannot help to fix every single one of them.

06:12.000 --> 06:17.000
So maybe building from source work for your last week, but it's not working today, we can never tell.

06:17.000 --> 06:27.000
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,

06:27.000 --> 06:34.000
as long as the fix is reasonable, like it's not carrying a 10,000 line of patch for review, that's okay.

06:34.000 --> 06:42.000
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?

06:42.000 --> 06:48.000
So the first thing to make sure that the pre-built binary packages work for every system setup,

06:48.000 --> 06:55.000
perhaps the biggest thing is to make it possible to bootstrap, let's see, on every system, on Linux or new Linux.

06:55.000 --> 07:00.000
Homebrews bottles are created in its CI environment, which is relatively new.

07:00.000 --> 07:06.000
Currently, it's on 1222.04, which provides ClipC2.35.

07:06.000 --> 07:15.000
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,

07:15.000 --> 07:18.000
because ClipC does not offer forward compatibility.

07:19.000 --> 07:25.000
In Homebrew, this problem is solved by automatically installing its own managed version of ClipC that matches the CI version,

07:25.000 --> 07:29.000
and when the system ClipC is older, this step is done automatically.

07:29.000 --> 07:39.000
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.

07:39.000 --> 07:44.000
If you like to read more about that, you are free to consult our documentation website.

07:44.000 --> 07:54.000
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.

07:54.000 --> 08:05.000
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,

08:05.000 --> 08:08.000
and likely even more maintainer efforts to fix issues.

08:09.000 --> 08:26.000
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.

08:26.000 --> 08:35.000
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.

08:35.000 --> 08:46.000
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.

08:46.000 --> 08:57.000
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.

08:57.000 --> 09:17.000
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.

09:17.000 --> 09:25.000
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.

09:25.000 --> 09:39.000
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.

09:39.000 --> 09:46.000
After all, we are an open source of reproject, and it's the thousands of contributors like you that keep our project alive.

09:47.000 --> 09:57.000
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.

09:57.000 --> 09:58.000
Thank you.

