 Okay. Hi. My name is Michal Taman. I'm currently employed by a company named Imagination Technologies. You might know me. I've been working at RSS for quite a while before. And now I have been contracted to work on, yes. So I have been contracted to work on Fedora for MIPS. What I will be talking about is firstly MIPS architecture in general. Then MIPS and what it means for Fedora. Where are we? Then some hardware that you can or cannot use and buy. And hopefully a live demo. So MIPS in general. MIPS has been around for quite a while. It's been introduced in 1981 as a university project for RISC CPUs. The MIPS company was founded by the professor who led the university research team in 1984. SGI, as you may know, bought the company in 1992. And Imagination Technologies. I mean, there hasn't been a lot of work around MIPS in the last decades, let's say. And Imagination Technologies just bought the company in 2013. So for the actual CPUs, there are loads of, loads of, loads of instruction sets. Different instruction sets. We can basically divide them into two groups. First are legacy, which ended in 1998. And then modern ones. The legacy MIPS 1 to MIPS 5. Some routers and some boards are still using them. But I don't think that's really relevant anymore or for something like future development. So let's talk about the modern ones. They called them MIPS 32 and MIPS 64, obviously. MIPS 32 and 64 are specified in revisions 1, 2, 3 and 5. Wikipedia says 4 was skipped because it brings bad luck in Asia. I don't know whether that's true or not. And there's a new specification, really 6 for both 32 and 64 bits, which was designed by Imagination Technologies, which has some compatibility issues. It's not really all fully backwards compatible because the rest is fully backwards compatible. The release 6 solves some historical issues that MIPS has to this day, but at the cost of the compatibility. So in the end of the day, MIPS can do both. Basically, it depends on what the CPU is designed to do, but in general, you can just pick the end-to-end test set and go with whatever. Unlike other architectures, MIPS has three major ABIs. It has the O32, which is the old 32-bit ABI. It has 32-bit data registers and pointers, and it has some extensions like for floating-point registers. I'll be talking about that. Then there is N64, which is like fully 64-bit ABI. And then there is N32, which is kind of hybrid. It has 32-bit .164 bit data. It's the opposite of what Intel does, because Intel wanted just to have more memory on 32-bit data, and MIPS wanted to have 64-bit data, like for example you want 64-bit time or 64-bit counters in the network appliances, but you still want to keep your binaries as small as possible. So that's the motivation. And for the variants of the O32 ABI, the first two are quite straightforward, like the floating-point registers are either 32 or 64 bits. The FP64A is kind of interesting. It took me a while to get how it works, but it actually tells your system you have 64-bit wide registers, but underneath the implementation in hardware is that you actually use two 32-bit registers. I don't know whether it kernel does it, or probably G-Lipsy that splits it and sets it into two registers. And actually, if you have an embedded assembly or whatever, you only can use the even register addresses, and if you use the odd ones, it will fail compiling. So yeah, and then there is the FPXX, which tries to be somehow compatible with everything. It assumes nothing and really either uses what's available or goes with whatever code is linked to it. Like the FPXX code is kind of neutral, and if you link it with 32-bit, it starts assuming 32-bit. If you link it with 64-bit, it starts assuming 64-bit from the moment. Today MIPS, where MIPS is used? Networking, of course. Switches, routers, embedded on network cards. Internet backbone, telephony, microcontrollers. Car industry in different driver aids, wearables that I've even seen at Tablet, and of course, video game consoles. And I was told MIPS is also starting to play in high-performance computing. And what usually runs on MIPS these days is Linux. Android has been ported in 2012 or 2013, I believe. All the BSD variants. And of course, I was surprised, actually, that the embedded Windows I knew about that, but Windows NT, up to the 4.0, has also run on MIPS, like on every other architecture. So MIPS and Fedora. There has been a bootstrap attempt between Fedora 11 and 13, and they called the architecture MIPS 64 EL. It was using the hybrid N32 ABI, little Indian, obviously, but there was little interest in Fedora 13. It just died. I mean, you can still get the packages from the original author, but it's a subset of Fedora 14. So then we have started our Fedora 22 bootstrap in last year, in March. We chose two architectures. MIPS 64 EL, which is now fully 64-bit, and little Indian, obviously, and MIPS EL, which is the 32-bit ABI with the FPXX, with the most compatible variant of all the ABI. And at this moment we are in stage four. We are preparing to deploy Koji. Koji hardware has been due to arrive in October, then November, December, and actually last week I got the photo of the actual machines standing in a rack, so I believe we finally have that, and we can deploy Koji now. Yes, I'll get to that. Yeah, you might see, and I've sent an email that Fedora 23, or reasonable subset of Fedora 23, has been sort of released last week, basically, or this week even. There are some images for Cremu and images for CI-20 board. I'm going to get to that. So, status. For 32-bit MIPS, you can see almost 7000 out of some 8000, I think. It's 8800 packages, source packages for Fedora 23. Xphase and LXD desktop work. There are some issues with building Java, like some real issues that we need to address. Adan is bootstrap, Valgrinds only has support for the fully 32-bit ABI. It has no support for 64-bit extensions. And one thing is that the dashboard, like that Fedora uses for hardening, is kind of broken on MIPS and breaks every package that uses hardening. On the 64-bits, there's a little less packages built because the built file for 32-bit is a little larger. Desktops also work via VNC. I am not aware of any MIPS 64 machine with video output. Yeah, Java builds, but Eclipse needs bootstrapping and Ada, obviously. And it has some interesting issues with Lungsun cores, which are made in China. Some Lungsun engineers try to contact us sometimes. They raise compatibility issues. They have some instructions that are rounding values in a different way than other cores. And they always ask us to disable some optimizations or, well, basically almost all the optimizations to be fully compatible. But when you ask them, I mean, what's the root cause, you get no answer or you just get, ask my manager and that's the end of the conversation or something like that. Needs more communication, definitely. Okay, issues, we've got quite a while. Obviously, packaging, if arcs. Some packages lack upstream support. There's no OCaml for MIPS. And, yeah, different JavaScript jits are or are not working, or even if they have MIPS support, it's for some ancient instruction set. And nobody really works on that anymore. So that's it. An interesting thing that the Google-built IDs aren't supported in MIPS. I've tried with build ID style called GNU GCC files. Obviously, Boosterab required. I was talking Java, Eclipse, Ada. Interesting thing, 32-bit MIPS only has three gigabytes of virtual space in a kernel. You cannot add more. Don't ask me why. It has something to do with mapped and unmet memory, but that's as far as I understand it. The dash m32 and 64 flags are not recognized by GCC, which some Fedora packages add explicitly by the node. Yeah. 64 is not present also on unbiased. Yes. So a lot of packages. Yeah. Or you need to add like IFARC ARM64 and MIPS64L. I've seen that. It saved me quite a lot of work. Yeah. Another interesting thing that Uname only tells you MIPS or MIPS64. You don't get the endianity. You don't even get the instruction set, or I mean MIPS64 release six isn't binary compatible with the previous binaries, but it tells you MIPS64 anyway. So that's not a good way to distinguish your architecture. And most of the packages actually use auto tools or CMEG and they handle this properly, but there are some packages that just check your name and go for it. So yeah. Dash L atomic needs to be specified explicitly on 32-bit MIPS. I have no idea why, but it just needs. Java, that's a really interesting story. I've been trying to, with the zero, with the zero like interpreted mode, it builds fine on 64 bits. On 32-bit, it dies on illegal instruction. I've asked several guys why this could be. I mean our internal tools guys, Java guys, kernel guys, and nobody is able to tell me. When we disassembled the code, found the instructions, just put it into a text file, compile it, run it, it was working. Only in the context of Java, for some reason the instructions are illegal. We've been on that for quite a while and nobody is able to tell what could be the issue. Then there's insanely long build time. MIPS obviously is not the most powerful architecture in the world, but my most favorite package for the last half a year is Libint, which is a library that computes integrals, which actually takes some seven or eight hours to build on primary. On 32-bit MIPS, it took 21 days. I actually think there's something conceptually wrong. 21 is really too long for the same build. I understand it's C++ and C++ is slow, but there's probably something that could be done. The full list is on Fedora Wiki. If you just go to Wiki Fedora Project or Architecture MIPS, you can find it. Future plans. Short-term, deploy the Koji, finally. Of course, and finish the bootstrap. Mid-term, fix or exclude all the packages. I mean, bring this to a state where it's secondary architecture like every other. For sure, we will be bootstrapping the R6 architecture. It's been added to Quemu in summer. And from long-term, imagination wants to be included in Resident Press Linux, but there's still a long way to go for that. So hardware. Current status of hardware. Very little standardization. Very little. Every chip manufacturer builds its own. I mean, it's very similar to ARM. You know, ARM unifies over time, or at least a bit. This is in the state where ARM was, I would say, five years ago when we started with Fedora. And it's even the same status in the kernel that you cannot build a generic ARM kernel and module for chipset. One board you are building for at the beginning. And this, well, with ARM, Fedora did flavored kernels. And it was the pain in the ass, but that's what MIPS... But that's the status MIPS is in at this moment. Yeah, a lack of support in upstream kernel. No, I would say current hardware runs on upstream kernel. Some boards are very close to that. Some are very far from that. But with fully upstream kernel, there's very little support. Of course, there's lack of hackable hardware because mostly MIPS is used in embedded boards. Like it's embedded on your 10 gigabit NIC or it's some co-processor for whatever. But you cannot really run your operating system on the actual MIPS CPU. Yeah, you can do that. Yeah, the issue with that is that routers usually don't have more than 256 MIPS of memory. Because for some reason, I was told it's a historical reason. I don't see into that. MIPS only has support for 256 MIPS of memory. And if you want more, you need to enable high-mem, which decreases performance. Yeah, and you can buy router boards. But they are usually Begendian. At this moment, we are not building Begendian Fedora. We might edit in the future. The issue is really, I would say, lack of build hardware because we just got our little Indian Koji. But there's no conceptual problem with doing that. Really, it's just the resources. And yeah, usually the memory, I don't know if anybody of you tried to use Fedora with 256 MIPS of memory, but you cannot really use DNF if you have that. Maybe Atomic could be a solution for that. I mean, because I don't know. Time will show. So, one board you can buy for sure is the Creator CI20. It's been designed by Imagination Technologies just to have some development board. It has a dual-core CPU, gig of RAM, 8 gig NAND, whatever SD card slot. It's basically similar to all the ARM development boards that came out over the last five years. It has, although, a pinout compatible with Raspberry Pi. And you can get it for 50 pounds, 50 British pounds. I think it's $65 in the US. Yeah, I'm getting that. The CI40 is a 32-bit board. It's 32-bit little Indian. The board Imagination is planning next. It's the CI40. It's designed to be for the Internet of Things. It's not really a development board. It has a low-power consumption CPU, double-core dual-threaded, so you should actually see four threads in the iOS. Again, it only has a quarter gig of memory. It has a small flash, and it has some dedicated chip for the 6-lop pad stack used with the Internet of Things. Imagination will actually ship it as a kit that they have some sensor boards already designed for it. I think there's like a box and three sensors by default. You can buy more. They have ranked fans on Kickstarter. The board, I believe, is either being in production or design is finished and will go to production, but it's coming. They raised enough funds on Kickstarter. No. Yeah, and then we have the 64-bits. The SDNA. It's, I think, some dedicated network appliance, software dedicated network appliance. It's MIPS 64-R2. Kabyn builds these boards. They come in several configurations for the 8CPUs, for the 4CPUs of memory, and they have SATA slot for a system. You can order them from Renault Labs. It's an American manufacturer. If you want to have it shipped into Europe, you need to pay taxes, unfortunately. That's the issue. They don't mention price. Last time I checked, they've only sold to companies. They only had one product. When I checked, well, when creating this presentation, now there are actually, I think, five or six configurations available from, presumably, cheapest to the most expensive. We only have, I mean, in the magic machine, we have the SDNA 7130, whatever. It was the only one board that was available. It was code named UTIM8. And it was about $1,000. It's a quad-core MIPS, I think, with 8CPUs memory. Yeah. And these machines are actually the machines that will become Koji. It's a photo from the data center. Yeah, so, I mean, you need to ask Renault. They have a form, like, ask us if we want to order. You can say 64 with Harvard. Yeah. I never said the situation with Harvard is good. I mean, I would love to tell you, I mean, buy this board. Yeah. When I was planning the presentation like half a year ago, or a year, half a year ago, ARMv8 wasn't in the shape it's now, and I was like, I might be able to compare it to ARMv8, but at this moment, I mean, really, it's worth. But there are other boards planned. I mean, Imagination just bought the MIPS, like, three years ago. And they basically started thinking about new boards. And they really do plan some next board. So hopefully, fingers crossed, we will get some more. Yeah, I see. Because, okay, your distribution, which you cannot now call Fedora because it's not a mission. Yeah. It will be used by two boards, right? One is for Internet of Things, most of the people will go for ARM anyway. The other one is for this one gigabyte memory board where most of the people will go for ARM anyway. Or you have 64 bit for one server. Yeah, you're right. I mean, I cannot tell you anything else. It's like, you have longer plans on replace rail by CentOS, and then it will be a bit closer to reality. Because CentOS, once you get Fedora running on this hardware, you can use it to bootstrap CentOS. And CentOS, you can build on your own, you can play with CentOS guys, get it included, et cetera. And in the realm for basically very niche market, I don't think it's possible. Maybe we should let it finish its presentation before we shed all over it, okay? Okay. Yeah, okay. You can, of course, use Kremu. It works. There are a lot of CPUs. Both 64 bits and such to begin in little Indian are some issues like you cannot get SMP for whatever reason. And you can only specify two gigs of memory. Kremu doesn't let you specify more. Live demo. Okay. The moment of public humiliation. Okay. Hopefully not today because the presentation is being run from the CI 20 board. You can see I have Bluetooth mouse and keyboard. Unfortunately, the GPU driver is proprietary, so you have to use frame buffer. But it mostly works. I've got Bluetooth peripherals. I can connect to the Wi-Fi, hopefully, even though it's unusable here. That's about it. So that's my live demo. If you want to see anything, just ask. I can try. Yeah. So ImaginationBolt MIPS has a company in general with all their employees. They are in process of somehow merging the workflows. They want to do that. But I mean, it's still working progress. They want to do this. They want to work upstream, but hopefully it will get there. It's all manual work. I mean, when you get to the point where you have Koji, you can actually do some automation. But before that, I saw a project that would actually try to ease up this process. I don't know what status it's in. Yeah, I know. Debian has a shell script where you basically bootstrap Debian architecture. It's on the other end. You get an ISO, but no. Yeah. No. Fedora has nothing like that. Yeah. So the GPU is the PowerVR chip, which is actually the primary business area of Imagination. So it's their own. They are discussing building or providing some limited open source drivers to the kernel so that it works at least somehow. Basically, something like Nuvo. It's not yet there, but the discussions are ongoing. I mean, there's... No, the short answer is no. I mean, I'm not aware of any. There might be in future. I'm not saying UFI will not be available, but at this moment, I'm not aware of that. You mean the... Yes. Well, there is the original MIPS bootloader. It's called, I don't know. CFE. CFE. I don't remember exactly. But basically, all the current boards work with you would. I mean, the CI20 board has... It has a newer one. I'm not sure how much they push... What part of it they pushed upstream? Nothing. Nothing? No. Okay. Because I know in a kernel, there are bits. I mean, you can build upstream kernel with CI20 DevConfig, but it actually doesn't work because you don't have any storage subsystem to put your root of JSON. But... Do you have another? Yeah. I've got... What? Oh, I didn't try that. I just checked last time that MMC, USB, and NAND didn't work at all. So, I gave up. And I mean, the patches are... You can grab the patches. They have 318 kernel on it. And they have Kidripper. You can grab the patches. There's lots of them, really. And you need some, I mean, USB chipset support for the actual... Okay. Okay. So, yeah. I'm not... I'm really not a kernel guy. I really just like working on the packaging stuff and bootstrapping, so... But definitely make your point. I will raise this to people who work on that. I have a question. No idea. I mean, the board is... If you go to Reno website, they have pre-configured. It's like the most powerful board is 48 cores and 64 GB of memory. And that's basically what's written there. And in case you want to order or more information, contact us. That's what's written there. So, that's as much as I know, really. Well, thank you, then. For those who ask questions and don't have a scarf, you can take one here. If you want to get some help, just contact me. I will be the general manager of the EHA controller in a few hours. Maybe as a kernel guy... yeah, okay. You can use a little bit of a config on your app. But userland is a bit... userland is actually... it's just a lot of... I mean, if you want to know that, maybe you can do your thing. Thank you very much for your work and for your mainline in Ireland. Thank you very much. Thank you. Thank you. Finally, I am in Hungary. Hello. And my brother is my hostess. I have already heard about you. I have heard about you. Thank you very much. I have heard about you. Thank you very much. Thank you. Sleepy? Hopefully I am properly caffeinated. Oh, thanks. Now if I could remember where I put my talk, that would also help. I think it's in the room over there. Okay, thank you. So, that's the way it is that I can share. Yeah, so, what's that for? I'm going to try it. If you... Yes, I'm going to try it. I'm going to try it. And I'm so many people here. All right, let's begin.