 Hey, so thanks for coming to the Hackintel talk. So for this hack, the pain point I had was I was trying to play this free RTS game called Liberation Circuit. It's a RTS game where you're in this computer, you're supposed to fight the other processors. Anyway, long story short, so it's on itch.io, but they only had Mac and Windows binaries. So there's no Linux binary. Now there is. Now there is, yeah, yeah, yeah, yeah. Because of, you see, it's like, because I provided Linux binary. Anyway, yeah, yeah, anyway. So, so open source, so you can go to the GitHub page and then, so the author was very nice. The author had an instruction for how to compile our Linux. So you must install all this stuff and then you need to run the compiler and so on. Okay, so I did that on my own machine, so I could play on my own machine. But then I thought, wouldn't it be great if we could have a listing on the Mac website where you could download and anyone can download and just play without having to go through all the steps because it can be quite tedious to install packages and compile and clone from GitHub and so on, right? Okay, because there's two link, Windows and Mac, so it would be nice if there's a third link for the Linux one, right? Okay, so, but you know if you compile something on Linux for your machine, you can't just take a binary and like put it on somebody else's machine. It wouldn't run, right? Because they don't have, they haven't installed the packages and so forth. But is there some way around that? So it turns out there's another project which is the main tool for this hack which is called Exodus. Exodus is a, it's a tool that lets you literally migrate a binary from one machine to another machine. So I think it's a bit small. So here I think the author is trying to show you could migrate these two called ARIA to C to this remote server just running this month. Essentially what it does is it traces through the required dependencies and the dependencies of the dependencies and so forth and bundle all of it up into one giant package and send it over. So it bundles all the dependencies together assuming the same architecture on the remote machine. Okay, so I tried this on the game binary. The next thing I'm gonna do is a binary. Okay, so then the game binary and it sort of works except there's this caveat if you scroll all the way down to the bottom. There's this problem with Glib C. So this game is written in C so and most thing uses Glib C. Glib C is the GNU C library. The C library actually talks directly to the kernel so it's the C library version you have limits the oldest kernel you can support. So if I compile on my machine which I use a fairly new version of Glib C people on older kernels could not actually run it because it uses a rather new version of Glib C. So it works but not quite so but they did give a work around here. So it says you can create your Docker Exodus bundles in a Docker container. So that's essentially what I did in the end. So the heck was sort of listed on there. So here's basically the end result. So there's a Docker file that uses DBN stable which is one of the oldest kernel and Glib C you can find on Docker Hub. So it installs the bunch of the libraries. The interesting here is it here is installed Exodus or take note it's called Exodus underscore bundler if you pip install it. It's not called Exodus. There happens to be a package called Exodus on PyPy so don't install that's the wrong one. It's Exodus underscore bundler and the key magic happens here Exodus dash T dash T means creates a table. Give it the name of the binary. It crawls through the whole system creates this giant table then combined with the rest of the the games also need some game data files. Like what are the missions? What are the levels? So I just combine all of those into one big package which generates this zip file at the end which now you see on the website. So give it a try if you like RTS games. So what's out of the game is that you actually have to design your own units to clear the levels. There are only like a couple of pre-made units the rest you have to design as you gain more components. Okay, that's it for my talk. Yes, question. Five minutes for questions. I can see why you might want to do this if you have binary but you're building from source so how is that better than just building from source and you can start this way? Oh, you don't have to change the build process. Like I didn't want to mess with their build process. Yeah, but it works with any binary. So I use it in another situation where I had to run something on a high performance cluster. I had this binary, a third party software I wanted to run a high performance cluster. On the cluster you can't install anything but you can copy binaries over. So I use the same technique to actually take the binary instead of recompiling on the cluster itself. Sometimes it can be quite hard to get things to compile on the machine where you don't have root access. Oops, what happened? You don't create and link instead, right? Again, it's not that different but statically usually you don't link even you can't bring your own G-Lip C when you statically link, I think. G-Lip C will still be the system one normally, I think. Yeah, there is this issue with G-Lip C that many cost of working in G-Lip C after you link statically or rely on dynamic version of G-Lip C to actually provide functionality. So you need to be careful if you are not using G-Lip Muscle or something, some library that is designed to link statically, your program might fail. So this one you get, your Ipando G-Lip C as well. Ipando G-Lip C. So how big is it compared to the... Can't remember. Dynamic feeling binary, you know. Much bigger. No, the binary is the same size just in the folder, in the folder structure there's all the other SO files. Yeah. How big for this? How? Yes, how big is it? Okay, okay. I have that somewhere. I just have to... That's hard ball. Oh, she can see it on the website, what, anyway. It's on the website. Does it say on the website? Yeah, it does. It says, right? It's like 14, I think. Yeah, oh. How come it's so small on the other architecture? Okay, never mind. Okay. But 14, I mean, what is it these days? These days we've done hundreds of megabytes, right? I mean, like, anyway. Yeah, good question. I didn't realize it's much bigger than the other two. It could have brought a lot of extra other stuff as well, I guess. Is it streamed? No, on Windows, Allegro is not part of the standard library. So it has to bundle all the Allegro binaries. Yeah. Yeah, no wonder why it's so big. Also, Exodus is interesting if you want to create some kind of like a minimal Docker container as well. You just take your binary and stuff all the SO files from into a scratch template that works as a container as well. Yeah. Did you not compile it against muscle? No, again, one of the things was I didn't want to change the compilation. Yeah, it uses something called redo, which is a little bit strange. Yeah, do redo scripts. I really didn't want to change the code. So, yeah. But it doesn't solve the problem of bringing all these Allegro libraries along. I mean, you had to somehow package all your Allegro libraries. This is this library for game development called Allegro. Which is normally dynamically linked. But Exodus is really good for lots of other stuff. I mean, not just, I use it particularly for this particular game, but you could use it to run programs on machines where you don't have ability to install software. So I do recommend checking out Exodus. So it's Exodus underscore bundler if you pip install it, by the way. Just to say that, because I keep forgetting and I mess it up myself. I would like to know what is your time estimate for how much you had to debug it and how long would it take to repeat the process for the new version? Oh, very little. Because it's just downloading a zip file. I just changed the number here. Yeah, no, this is a script. So it's all, it's automatic. So it's automatic and it's on indocer, right? Yeah, yeah, yeah. Yes, yes. It's automatic. And it's actually CI, so it's continuously delivers new versions of the software. Well, the author isn't really actively developing, though 1.3 is the last version, yeah. But the GitHub is still open for contributions if you like writing games in C. Any more questions? Oh, but do try also, do try the version circuit, yeah. It's really cool. I should play it, never mind. You can go back and play it. That's not I should have played it while I was talking. It has really cool, like, vectory graphics things, okay. Yeah, if you like, it's kind of graphics. And then the custom units, where you put it together visually on the UI. Yeah, okay. Okay, that's it, thank you. Thanks.