 How far is it going to talk about Haiku, another retro desktop? Well, kind of, yeah. Well, it's, yeah, it's inspired by retro stuff, actually, because it's now vintage, so, yeah. So, welcome. Yes, I'm a user and developer for Haiku. And I think there are still some interesting bits to copy from us. So, we are sharing. So, what's Haiku? Haiku is a free software operating system. So, it's inspired by the BUS that most of you don't know what it's about. It was a proprietary operating system up to, like, 2001 until the company shut down. People tried to maintain it, but it didn't work out. And despite the fact that it was proprietary, some of us used it, and we thought it had interesting ideas. So, we just thought, oh, let's rewrite it as free software. So, it won't be able to disappear anymore. So, basically, Haiku is to be read what GNU Linux is to Unix and what ReactOS is to Windows, if you don't know about ReactOS. We use our own kernel and our own graphics server. So, it's interesting because we control the whole stack. So, if there's something we need from the kernel, we don't have to call Linux and ask, please add this Cisco. We just patch it, and that's it. On the other hand, it means, well, porting stuff from GNU Linux that uses X11. It's a bit harder, especially because, well, some Linux devs, when they get patches for Haiku, they complain, oh, but that's not POSIX, whatever, even though we do add proper configure detection of the feature and whatever. But then they just forget that they also use private, well, Linux only sees calls that aren't POSIX either. But, well, they are Linux, they don't care. And also, we have AC++ API that has some interesting consequences, like the fact that we have to still use GCC2 to compile the base system, but we also support GCC5. It's 6 now, I think, I don't know. So, yeah. So, that's what we were inspired by. We have an old screenshot of the US, and, oh, look, there's a dock. But it got changed to the desk bar later on. But, yeah, docks are naturally new. Sorry. So, that's just to give you an idea of the Haiku in heritage. So, BUS borrowed stuff from Unix, from macOS, because it was created by an ex-Apple CEO, Apple Europe CEO, so, yeah. And so, I said we use our own kernel. We actually forked the new US kernel, which was written by an ex-Bink engineer who was frustrated because it couldn't work on the BUS kernel. So, he just said, oh, let's write my own kernel. And we forked it, and now it's our own version. So, you might think, okay, this looks like 1990s stuff to me. Most of us don't really fancy stuff like, wow, animations and stuff like that. Yeah, I mean, animations are cool, but when you're in macOS and you're trying to switch from one space to another, you have to wait for the thing to move. And if you hit the shortcut too many times, it just goes, oh, oh, oh, I'm sick. So, yeah, we prefer just to have the thing work, and it's faster this way. And there's more to it. Of course, we've added some new stuff in Haiku that weren't really current standards at the BUS time like layout supports, which was necessary then for the translation because some strings are not the same width in different languages. And it works quite well now. Some applications still need to be brought to this API, but most actually work this way. The design of our graphic server and interface kit, which is our own toolkit, is a bit weird because we use threads everywhere, maybe a bit too much for some people. App server, which actually is the graphic server, spawns a thread per window to handle the repainting and stuff like that. The application itself also has several so-called B loopers objects, which actually spawn their own thread. So the main thread is taken over by the B application object, which runs the messaging loop for the whole application. So messages like, hey, let's quit or whatever, or you've got a new file to open or something. And also, every time you create a new window, well, we create a new thread to handle the window's messaging itself, like you need to repaint, it has been resized, whatever. This means that when a window is stuck calculating, well, if a window is stuck calculating something, the whole application won't freeze just because of it. Usually we separate large calculation in yet another thread, but like video decoding. VLC does that. It has a lot of thread even on other platforms, but if you look at most applications on GNU Linux, it's basically the main thread, which is a loop on select, which works, but, well, it just serializes stuff. So it's good for responsiveness, but on the other hand, when we have to port Linux-ish applications, we have to serialize back all the messages into a pipe and add it to the select loop. And, well, it works, but it's not as good as it should be, but, well, it just works. We have what we call replicants. You've seen Plasma earlier with widgets. It's a bit like this, except that's one application that can provide a preview. So it's the base canvas of the toolkit to another application, and it's not limited to the desktop. It can be used by another application. So for example, there's a documentation browser, which is called Be Happy, which actually used to load the net positive replicant, and I fixed it to use the net surf replicant to display the HTML documentation. There's one thing that I really miss on other systems. It's called the HRA navigation. So basically, it means you don't have to open yet another window just to go down a folder. So, well, I can show you live. So that's just my main development virtual machine in VirtualBox. So it's a bit slow to boot, but it's still faster than most other operating systems I know. So, yeah, folders, lots of folders. So you go to the desktop, and then you can just browse for them. Oh, that's from a talk of me. Oh, that was last year. So, yeah, you can browse the file system this way, and you can even just take one folder and move it, well, yeah, whatever, there, there, and, yeah. So, yeah, you can just move things around without having to open windows every time. And there's also move to copy to with the same thing. We have a scripting API, which, well, on Linux you have debuts. It's a bit alike. And so we can actually, the base toolkit actually understands it. So you can actually say, hey, give me the title of the window or simulate a click on this button, whatever. So it could be interesting like for a screen reader to just get the details of the interface. Node monitoring, the tracker uses it to, the tracker is the file browser. It uses it to see which files have been moved and whatever. So, well, iNotify is not really a new invention. We also have a lot of use of extended attributes. We just call them attributes, but, except ours are typed. So you can actually say it's a string, it's an integer, a float or whatever, or just binary. And like on Linux and most OSes, it's just a name and a value, which is either a string or a binary or whatever. And the fact that it's typed means the file system also can index it. So, because if you want to index a float or an integer, a string is a bit different to handle. So BFS, which is the file system we use, actually can index those and make them searchable way faster than having to call files, extract stuff, and make a separate database in the file system. And it's also always consistent. So it's used for emails, contacts, whatever. So it's really used everywhere. As I said, most operating systems know about extended attributes, but they usually have their own twist about it. There's an effort to standardize it, at least on Linux. That's called the common extended attributes standard from the free desktop website. It's been used like, well, in some places, but I don't really see much of usage of them. And, well, when you move files around on NTFS, whatever, then they get mangled, and this results in just a blob you don't know what's inside. So I try to propose a solution, but, well, it seems nobody cares, so we'll just do it our way. We also have live queries. So basically, the kernel knows about attributes indices and also queries. So you can talk to the kernel and ask, hey, what are the files that have this in the name, that have been modified since, that have the mail colon status status equals new? So you can actually get the list of the new mails in the file browser. So you don't have to open the mail client to see if you've got new mails. So, and it's updated live, of course. So when the new mails are fetched, they get in the list. So you can search by attribute, and it ends up as a formula. Some of you might have seen Spotlight, the search stuff in macOS. At some point, you could enter the formula. Well, the same guy who wrote BFS, actually wrote this stuff in Spotlight for Apple. So it's quite similar. We also have a MIME database, like you do have on Linux. It's more integrated and it's also used for applications. Like each application has its own signature. So you can actually do interesting things like, say, open with the MIME signature. So either it's the application itself or one of the MIME types it supports. So it just works the same way. And we also use it for clipboards. I think on Linux now, it's also used by the X, Facebook or whatever, clipboard, whatever. Not all applications really handle it correctly. I've sent patches to virtual box to support images, but it's not really there yet. At least the X11 clipboard now supports UTF-8. Wow, that's great. And Dragonrub as well. Like... Well, it's not really easy here. Well, if you open an image and you select a rectangle from it and you just right drag it on the desktop, you can get a list of the file formats that the application can save to. And then you can decide which format you want and just ask the application back for, oh, I need this MIME type, please convert. Oh, and yes, we also abuse it for URI scheme handlers. But well, it also exists on Linux. It's just not the same prefix, but it also works. We have our own icon format. Back in the days, BUS used to have bitmap icons because, well, it was just the way things were at the time. It was stored as in extended attributes in the small section of the iNode because there was still some space in the file system, so it was just faster this way. And Zeta was an attempt to revive BUS a bit later. We tried to, because I worked there at the time, we tried to put SVG in there, but, well, SVG is text. It's like, oh, 128 kilobytes just for an icon. Bit large, even compressed. And so for Haiku, Stefan, which is one of the developers, designed our own icon format that's simplified. The coordinates, for example, are on 8 bits, 8 bits for X, 8 bits for Y. So it's much smaller and it's still vector format. It has gradients and transparency and the icon editor can import and export SVG, so we should be able to import the SVG icons from GNULA themes, for example. And we now have our own packaging system. It's brand new. Well, it has, like, one or two years since we actually switched to it. So by the way, if you want to try Haiku, you can have images on the website for virtual bugs and VMware and whatnot, and the ISO, you can either drive burners CD or dump it to a USB key and boot from it. Just make sure you take a nightly build, not the official alpha, because it's like three years old and it doesn't have the packaging stuff, so it's a bit of a shame. We should get a beta version someday. So we went a bit like the Snap stuff from Ubuntu. I won't say who copied who, but it's a package FS, basically it's a file system that mounts the content of the package inside the file system. So it's read-only. So it's nice because you make, you are sure the files weren't modified by any other third party, but then some things like Python and Ruby or whatever, they always want to modify the file to add something, either line when the package has been installed or whatever, but we handle that. And it's nice because there are transactions, so when you update, I can show you an update there. It should work. So that's, we do have a graphics application store, but the update isn't handled by the GUI for now. So yeah, it just wants to update it. So, and that is nice Unicode progress bar. Yeah, I'll just leave it running. Oh, by the way, yeah. The blue lines here are just the resize size, so you can actually use some modifiers and move them out to resize the window on one side without having to hit the spot here. So yeah, it's updated. So it has some similarities with GNU Geeks, if you've heard about it. It's not really the same, but it has some similar concepts. And also it's way faster. It was already really fast, even now way faster to install Heiko because it only means copying 200 files and that's it. Workspaces, well, everyone has virtual desktops. We have our own twist. So each window can be mapped to any and all of the workspaces. There's basically a bitmap, a 32-bit field, which one bits per workspace. And they can have their own resolution. It's much less useful now, but in the BOS days, when you wanted to see if websites were working in 266 colors, you would just take the browser window and switch to another workspace and see, oh, this color is, let's change it. And we also have a nice stack-and-tie feature, which allows you to superimpose windows and have them stick together with the tabs arranged automatically. You can actually slide the tabs if you want, just hold shift and click the tab. And you can actually also glue them side-by-side and move them as a group. So when you're working on a project, you want some applications to just stay together. Yeah, that's about it. I could show you probably... So yeah, that's the updates. When you're updating the system packages, you actually have to reboot for now to actually handle... to actually install more packages because it just has the transaction. It's waiting for the old versions of the package to be left unused. So I'll just reboot. And then I'll show you the interface for the package manager. Yeah, that's... Yeah, my desktop is a bit messy, but it's bigger on the inside. Yeah. It would be easier than going to the desk bar. That's a bit wide. So yeah, that's how it looks, just like any other package manager. Just like any other package manager, you can even rate applications and whatever. And... So the file system is a bit different than on Unix, but we have a root folder and whatever. Oh, I can show you this. Yeah, so that's the file system currently mounted. So Slash Boot is actually the root file system because Slash is a virtual file system as well. And those are the package FS instances. So inside Slash System, it's read-only. But you can actually install to Slash Boot Slash System slash non-dash package to have the read-write version if you really need to for some reason. And yeah. So that's where the packages are stored. There's this folder which holds the previous transactions. So if you reboot... Well, if you can boot after an update, you can actually go into the bootloader and say, oh, let's boot this version or this version. So it's really, really handy to resolve a broken update. So, and just last thing. Well, I've got set a record here, installed. And if I just click and move the package away, yeah, it wants to uninstall another package that depends on it. And then CDR, I can just... I can just use it if I just take the package back in and it's back. And it also shuts down really fast. So thanks for the question, for the presentation, for attending. And we have some time for questions, I think. I mean hardware support. I mean graphic and media or CDR. So what about hardware support? Why is not really a desktop question, but... We do have a glue library to reuse FreeBSD network drivers. So that's really useful. We have an HDO driver that works on most recent hardware. I also bought it open-sale when it was open-sourced like five years ago or something. The current issue is mostly about graphics card. We support visa mode. So at least you should be able to get to desktop. The problem with this machine is because it costs like 1,400 euros. I have a full HD panel, but when I retire, I'm in visa mode in 1,024x700. Ah, come on, NVIDIA. So yeah, I think they did publish specs now. I really should have a look at them. And I think the bug... I think the bug in Nuvo that crashed like three times a week on this machine has been fixed. So I should probably be able to port Nuvo to Haiku when I've got the time. Yeah, we do have some OpenGL support with MISA. So software rendering, I think it's called SWPype. So it's a bit faster than the default software rendering. But we don't really have 3D acceleration for now. Patch is welcome, I would say. So yeah, that's mostly... Most of the problems are with graphics cards. So you use GCC2, but you can use GCC6. So how does that work? You have both versions of the NVIDIA, like on Windows before, side by side you can run both apps. So yeah, question was... You use GCC2, but you also use GCC5 or 6. And how is it handled? Yes, we basically do the same way as on Linux. You have slash lib slash and slash lib slash 64, whatever. So we also have slash system slash lib and slash system slash lib slash x86, which is the architecture, a separate architecture nickname for GCC6. The old one is named x86 underscore GCC2 to make sure we know the difference. And our Hikoporter tool can also build both when the recipe supports both. So usually the recipe declares architecture equals x86 GCC2. Secondary architecture equals x86. And for things like the native web browser, we use WebKit and WebKit doesn't really care about GCC2. So yeah, we have to support it anyway. And the goal was to have binary compatibility with BUS for R1 and to drop that afterwards. So we are working also on newer stuff. We just still want to have the binary compatibility because it sets a precise goal for R1 mostly. Yeah, go ahead. So yeah, we support C++. What about other languages? We are officially supported by OpenJDK, which is quite rare to say. And so our Java part is mostly working. I didn't really use it much, but things like the Arduino IDE has been packaged. I think the last time I tried to install it, one of the dependency was broken, but it should run. There's... Minecraft? I didn't try running Minecraft. That would be interesting. There are free software alternatives to Minecraft, by the way. Yeah, there's Python. We do have a Qt port, by the way. There's Qt4 and Qt5, which is quite handy because some software are huge and we don't want to rewrite them from scratch. So you should be able to use Qt with Python, maybe. I didn't try. Python, I think there's Perl, Ruby. Someone started the Go port, like long ago, but it's an ancient version. I think somebody updated the port, but I'm not sure which state it is at. Sorry, I have some. Time is over. Okay, thanks. Thank you.