Okay, welcome back to VMworld 2013. This is SiliconANGLE and Wikibon's live coverage of VMworld 2013. This is theCUBE, our flagship program, where we go out to the events, they strike the signal from the noise. I'm John Furrier with SiliconANGLE, I'm Jordan Bikos, Dave Vellante from wikibon.org. Hi, buddy, Guy Souter is here. He is the general manager of Barracuda's storage business. Many of you don't know that Barracuda has a storage business, so Guy, welcome. Thank you, it's great to be here, Dave. Tell us about Barracuda's storage business. Yeah, that's a great point. We're obviously very well known for our security business. Yeah, absolutely. Barracuda's got an incredible brand and a lot of folks in the technology industry really know who we are and our story resonates with them in terms of creating easy to use, powerful solutions that are affordable. We've been in the storage business for five or six years now. We actually started in message archiving. So basically what happened at Barracuda was we had a lot of customers from our spam and virus firewall product that came to us and said, hey, you guys seem to be pretty good at email. We need to store all this email and there's no good solution to do it. Can you create a Barracuda-like product that would store our email? And so we developed the Barracuda Message Archiver and that was our first storage-based product and that got us into data protection. Once we started doing that, we realized that our customers have problems with other types of data other than email. And so we went into the backup space. We made two acquisitions in the backup space, one of which is where I came from and we created what is now our top selling product in the company, the Barracuda backup. So backup archiving. And our most recent addition is copy. Have you ever heard of copy from copy.com? I vaguely have heard of copy from copy.com but I couldn't say I've used it or... It's brand new, it was just released on the market in February. It's a file sync share service done by Barracuda, runs on Barracuda's cloud storage platform. So enterprise file sync. Well, it's also consumer and prosumer as well. So we're filling the whole gamut on that side. And really the strategy for us doing that was, we believe that where file sync share is going for corporations is something that needs to have a really great user experience. He's of, right. Okay, so this business is evolving. He started at the kernel of archiving, competing against some pretty established players. And you said about five years. So it was set around the time when the federal rules of civil procedure were kicking in and that was a critical capability. So where do you see taking this business? What's the vision that Barracuda has? Yeah, I know it's interesting. And if you look at archiving where it's the most regulatory kind of related business that we have at Barracuda, the truth is actually just as many customers come to us in our archiving business for storage optimization as they do for regulatory compliance. And that's because email storage is hard. And the volume of it is very, very large. And so one of the things that our archiver product can do is actually offload a lot of that storage from your primary email servers that are transactional, very expensive storage. But in terms of where we're taking the business, I think we've done a lot to bring data to the cloud. And the question that everybody has is kind of what now? Now that I've got my data in the cloud, what can I do with it? And that's the answer that we're really trying to find right now. I'm excited to this interview because I remember I interviewed Zach, Michael Peroni and Dean Draco back in 2005, I think. And I remember Zach's quote, we want to make the appliances, that back there was a spam firewall, as easy as buying a microwave oven. And on that mission, they've had a huge run. So watching their growth and watching you guys grow has been fantastic. And getting back in the storage business, you wish it's that easy now. So what are you guys doing now? Well, the market wants ease of use, we heard that. So that vision is fantastic. How do you get that done on that? I mean, that was an easy appliance, you plug it in, they didn't charge license fees, it was buy one product, that's it, that resonated with all the customers. What's the innovation now, now that you guys have got storage is complex, it's not as easy as plugging in a firewall? It's definitely complex on the back end, that's for sure. We work really hard to make it easy for our customers on the front end. It's a great point about the appliances. Barracuda is really built on shipping appliances and we were kind of at the forefront of that, at the edge of it, when that was the simple way to deploy technology. And when we went into the spam market or the web filtering market, it was companies that were selling software, where you had to buy your own hardware and you had to integrate it yourself and you had to manage a bunch of stuff to get the solution in place. Barracuda came in with an appliance that was just push button easy. But really that's about a deployment method, it's not necessarily about how do you solve problems. And today, a lot of our products involve the cloud as well. And so that's one of the ways that we're kind of addressing simplicity today. We use the cloud where it makes sense. Our backup products are a great example, we actually have an appliance, a near line kind of local store of your backup, but we also have the cloud fully integrated. Barracuda has its own cloud storage platform, which makes us unique in the market. And I think the innovations that are coming out today are really about doing the deployment method that makes sense for the customer and making sure that we work really, really hard to create the solution that's end to end all in one, solves the problem completely, isn't just a part of the answer. We do that in a way that can be set up quickly and you can get the value really quickly from. Yeah, I mean, I remember back in the day, Michael Prone was telling me, oh, you didn't have a lot of brand awareness, so he did something really innovative. He put the ads in the airports. Now, it's famous, you can't go in an airport without seeing a Barracuda logo, so you guys have crossed over the awareness issue. People know who you are now. Now, with BJ Jenkins on the team, you got an ex-guy who knows storage. How do you guys penetrate the awareness on storage? Just meat and potatoes, walking and tackling? You know, we've been doing marketing on our storage products now for four or five years, you know, a lot of marketing, because that's what Barracuda does. And the funny thing about it is, as you talk to people, they're like, hey, I just saw the first Barracuda backup ad, that's great, now you guys are advertising it. They're like, that has been there for four years. But you definitely have this issue where people know us for our legacy and our heritage and what we are, and that's great. We're a security company, we care a lot about security, we care a lot about privacy, but sometimes when you see the Barracuda logo, you think security, oh, I know those guys, that's great. Like in the airports, right? Yeah, well, it started as a gimmick, really actually worked out well for the company. I know he always buys that at the inventory, but you guys are known for bulletproof, rock solid products. That's right. And it gets harder when you get into the software to find data center, what are you guys doing to keep up? What's the key strategy for you guys on the product side? Same strategy, is it more software, more management? The key strategy is just really just solving our customers' problems in the easiest way possible. That's the key strategy, and whether that's software design networking or through a combination of a virtualization platform that we have out there, or if it's hybrid cloud with appliance attached to it, or if it's pure cloud like copy, that doesn't really matter to us as much as defining what the problem is the customer has. With copy, it's Dropbox, and everybody having their data up in the cloud, but the company having no control over it, right? Defining what the problem is, the biggest problem that our customers have and finding a solution that's really easy. You know, on the storage awareness question, just to loop back to that one, I think we've made some headway. You know, our bear could have backups the top selling product in the company now. Storage is a third of our business, and we just hired BJ Jenkins. So we're getting people's attention, we're getting there. I mean, if you always make it easy for people to buy, you make it product solid, you can do well. Yeah. Right, that's kind of always been kind of the philosophy. Well, congratulations, it's great to have you on theCUBE, Dave, do you have anything else? Well, so I just wanted to follow up on the comments on backup just in general. I mean, it's not the sexiest part of the business, but it's a lucrative one. It's insurance, right? And to your earlier point, I think you were alluding to trying to get more value out of that backup. So my question is, how do you see that evolving and what role will you guys play there? That's a great question. I'll give you two specific examples from today. You know, we're here sharing our cloud-evolved story with our folks at the show. And really, that's about on the backup side. It's something we call Live Boot, Cloud Live Boot, which lets you take your VM backups that you have sent up to our cloud storage and boot them directly on our compute. So you can use our hypervisors up in the cloud, boot for recovery, boot for testing, whatever you want to do. And now you don't only have a repository of that stuff archived in the cloud for data protection, but you've also got a recovery story there as well. Another example is integration with copy that we have with backup. So you can actually take your data that you've backed up with our Barracuda backup products, and you can restore it to copy. So you can imagine if the hurricane comes rolling through and wipes out your entire location, you can just take that data that's critically important to run your business, restore it to your copy account, share it with the people that you're working with and be back up and running. Okay, but you're essentially describing, if I get it, an environment where you're leveraging that data as a sort of a major source of the data in multiple places. And I'll call it a single source, if you will. And so that seems like a good vision, one where you've got a main copy, a gold copy, if you will, of the data, and you're leveraging it for archive, maybe even for populating data warehouses down the road. Is that the direction that you're going in, or am I reading too much into this? No, I mean, I think we're going in multiple directions across the company because we cross a lot of different categories. But specifically in storage, I think the direction that we're going is making your data active. So the stuff that you've got that's archived, making it searchable, taking the stuff that you have that's backed up and making it something that you can take action with and you can get value out of. This is value, right? Exactly, yeah. And with copy, it's about collaboration. It's about sharing, collaboration and giving companies away, it's just like Skype, you know, back in the day, when Skype came out, everybody blocked it, right? Because that was the answer. But the truth is, users were using Skype because it made their lives better, right? So blocking it was the worst idea. You know, so it's the same kind of thing with File Sync Share right now. Everybody's blocking it, but really there's a reason that the user want to use it. It makes them more powerful, more efficient. You know, and so what we need to do as barracudas to provide a service that gives the users what they want, which is very important to us, why we spend so much time on the design of it, give the users what they want, something that they can approach and adopt, but also give the companies the control that they need and the security and peace of mind that their data say. Interesting, under the radar twist on the old business. Yeah, great. Guy, thanks for coming on theCUBE. Really appreciate it. Say hi to the folks over at Barracuda, Guy and Zach. I know Dean has kind of moved on. Yeah, we still talk. We compete on the number of laps we swim now, so we just send numbers back and forth. I'm in contact with them, and I will definitely give you regards. Yeah, I just want to say, a big fan of Barracuda, again, self-funded founder, founder-funded, massive growth, great vision, great team, congratulations, and now you've got BJ, great executive from EMC, great score, and I follow Michael's Facebook, I see all this water skiing up in the Delta. Michael, shout out to Michael Peroni. Thanks for coming on theCUBE, really appreciate it. The network's inside theCUBE. I'm going to make a move in the storage space, and if they do, it's going to be dangerous, so we'll be right back with our next guest after this short break.


So you're making a ton of mistakes as a self-taught developer. You reached right video that makes playing this video was brought to you by digital Academy you're number one source to learning programming fast and get to that six-figure salary you desire our third day project course Includes our JavaScript front-end projects our Python back-end projects our sequel database projects and much much more So go ahead and click the link below to our free seven-step guide so that you can start reaching your programming goals today I'll see you guys in the course So let's get a couple of quick points out of the way before I really get into the details of the video I really just get to you guys who are trying to be self-taught developers and the mistakes you're making guys Don't be that typical coating monkey style Self-taught developer. This is the person who just all in on learning how to code regardless of any job prospects problem-solving problems Or anything you just HTML code code code code code code, and that's the only thing you're talking That's the only thing you really value and that's okay if you're doing this as a hobby But all of us are trying to find a job as a developer. That's the whole reason we taught ourselves how to code We're trying to get to having that career faster without having to go to traditional way of college or a Certification or a bootcamp or something like that. So at the end of the day guys We have to make sure we don't make these mistakes as a Self-taught developer to put us ahead of the competition and put us where we need to be But before I get started with all the other details guys, do me a favor Tell me a little bit more about yourself and your journey as a self-taught developer What you're struggling with some what are some of the other mistakes that you're making? Comment below. Let's start a conversation I want to make sure I give you guys an opportunity to Tell me more about yourself and then we can have a more more detailed conversation I can help you guys out more if I can know your struggles put you in position So comment below that being said guys. I made some points here. I want to make sure I cover these specifically and Again guys with the whole self-taught developer thing. It's great. Don't get me wrong. It's great I don't want to come across as being negative I just want to make sure you guys are aware what you're up against and how you're gonna present yourself to be valuable Because at the end of the day you do not want to be that person who's struggling to an interview not prepared Don't have anything that you need to stand out from the other competition You're gonna let college or coding boot camps or even people who have a certification Just pass you even though you may be a better fit for the job You're just coming in with that same self-taught development mindset cold cold cold cold cold and not thinking about any other factors And I want to talk about some of those factors here today guys number one can't showcase your skills on to your network and Two things there showcase your skills and your network. You probably haven't done any of those two things You guys may be wondering hey, right. I don't want to go to all these events and smooths and stuff like that I never get in jobs from that and you're right to a certain extent But at the end of the day you have to know the layer of land of your industry your local job market Who's the movers and shakers who's the companies and how do you fit in that dynamic? Can you actually help these people out? Do you know what they need all that stuff? You can find that out by networking It don't have to take a lot just a little bit But at the end of the day when you're networking you have to showcase your skills and be able to let them know Communicate to them. Hey, how can I help your company? You have this problem? I solve this problem I I've seen this problem in the past and I solved it this way with my code You got to be able to communicate that to them if you don't do that Somebody else will and you won't get the job You'll be amazed that people that don't have a traditional four-year degree or Four-year coding boot camp or all these fancy certification it comes down to fit Do I trust that you can get the job done? But I can't take a chance on you if you haven't showcased that to me. Yeah, I can you're talking good about the technology I see, you know all the frameworks library and all that stuff, but I Cannot take your word at face value I need other things that can show me your value and that you've done something similar to end to this in the past My other point there or make my number two point gonna go into detail of that number two is No real-world projects and before you get on me. I'm gonna tell you hey I understand as a self-taught developer You don't know what the real projects real-world project looks like you're right, but you can do some Networking you can do some detail analysis on the actual job market That's going to allow you to find out what these real-world projects are or better yet You can get my seven-step guide below. It's free guys We go over some of these real-world projects That's going to allow you to have the advantage over your competition These are some of the projects you can even as you doing your networking events you can talk about Hey, what are you guys doing for onboarding? What are you guys doing for off-boarding? You got some slow-ranging systems? Hey, you want to upgrade this? Oh that legacy code that dotnet framework need to be updated Hey, your custom modules need to be performing through a graph that integrate that data from sequel to my Front-end application all of that is stuff that you can get a huge advantage over if you have that level of knowledge of those processes and Projects the real-world projects over somebody who had a college degree Now boot camp all these certifications if I had somebody if one put put myself in a position of the employer If I had a developer basically telling me hey, you got the problem onboarding off-boarding all those stuff Hey, I've done that before this is how I can do this for you and I Basically can do this for you in the end What do you think that person gonna do next when can you start? They're not gonna be looking at your resume. They're gonna confirm it though Then they got your portfolio. They're not gonna be asking you all these questions about the coding where they do now the Coding interview and you got to go through all of these different tests and all this stuff Show me if you've done this I want to see proof of it just to confirm it Come work for me.  We're gonna get into those projects It starts and ends with the projects guys And if you already checked out my seven-step guide already go grab the premium 30-day developer course is gonna really put Things in perspective for you get the right projects in front of you and also show you how to showcase your skills and give you Shortcut on how to actually get a job and really put yourself in a position as a self-taught developer because I want you guys to see Definitely want to do that and number three no form of education college or certifications and Listen to me on this one guys not to say it's required to get a job But if an employer see somebody who self-taught with the same level of skills Experience or as an aspiring developer want to get started versus a college degree or somebody from podium coding boot camp And we're talking about same person same personality everything equal They're probably gonna go with that for your degree only from a traditional perspective feel like hey that formal education gave that particular person the edge over that and yes, that's a real thing and Unfortunately the only thing you can do to don't put yourself in a position is to be able to communicate more of the Processes how you can help solve problems all that stuff on the resume and showcase your skills and all the stuff that we talk about in our Previous point if it's equal if it's equal They're gonna always most of the time pick the person with the most education and again You know again, this is hypothetical. I'm pretty sure in the real world. There's gonna be differences personality Different projects different experience level this person can come on On this person want to work remote all those different factors But at the end of the day you want to make sure you give yourself the best Opportunity to get these jobs guys, but at the end of the day if you haven't already guys comment below tell me about your situation and Also, check out the goodies in the description box My seven-step guide and also go ahead and check out my 30-day Lunch bag course guys links below to all that and I'll do you a extra favor I'll put a link here on the screen and I'll see you guys in the next video base


I'll get started with my talk today, which is called QMU, emulate your way to success, give a quick introduction to myself and what I do with my work, and then we'll go through some basic case studies, information about QMU. So welcome everybody. I hope you won't have a nap after lunch. It's great being back in Japan. I was here back in 2019. So I'm a senior engineer at a company called Codephink. We're an open source consultancy based in Manchester, UK. I myself have done a number of contributions to things like QMU, Linux, and a few other open source projects. I really like QMU. It's been really useful, and we'll show some of that. Legals wise, I believe that I've been OK to put this out as CC by SA licensed V4. It is not V1.0 because I have done a couple of minor edits from when this was last given. So the introduction. So we'll aim to show some things that you can do with QMU. We'll go a little bit into what QMU can do. We won't be going into any deep technical dives because QMU is a very big project. It's not kernel big, but it's certainly big enough that it warrants its own confidence, I would say. But hey, we don't have that yet. I won't profess to being a QMU expert. Not all of the work that I'm going to be talking about today is my own. We have used QMU extensively throughout our company in a number of different projects. So we'll start with a quick introduction. What is QMU? So it's flexible open source system virtualizer to emulator. It can basically act as something more like a container to a completely different system running on your own computer. It supports many different architectures. Some of these are very familiar. Some of these are now lost at the history of computing. So, for instance, x86, both 32 and 64, risk 5, 32 and 64, ARM again 32 and 64 bit, and a number of other things. Importantly, it does not need any kernel drivers to allow it to work. It can be run as a purely user process. Although there are enhancements that features like KVM can give it, they are not necessary for it to run. I'm fairly sure the main source is GPLV2. There are some bundled components that are not, but those are mainly extra bits you can use. It runs under most Unix systems under Apple or Windows, so you can pretty much do the same thing that you can do in your Linux under Windows. And pretty much most major Linux distributions ship QMU as standard. We'll do a quick bit of history. This is not very well researched. The first release tag I could find was 0.10 back in 23rd of March 2003. The current release, and this is current, the v7.10 release may well become v7.2 soon. That I believe there's a release candidate. By the time I finish this talk, it might have moved on. There's also a v8 starting in development, but that will not be around for a bit. It's got over 2,000 contributors. I'm not going to say it's accurate. This is me using Git and some scripts to work out. Some contributors are a few patches to at least one with over 9,000. I'm not going to do a lot of talk about the first way you can run QMU. This is an API emulation. If you want to run ARM code on your x86 laptop, this is the way you're going to do it. It allows you to run foreign code under your host system. It translates that code into sort of native format. It also will translate the system call information signals, that sort of useful stuff to allow a process to run as if it was a standard process on your system. This is very useful if you're doing, say, a churru into a foreign system. You can use that to set up a churru or set up a bin format extension. There's documentation for that, and often your distribution will do that for you. It's probably not very easy to read this one, but that was just me running a terminal starting in x86 land. I use schurrut to go to a Debian ARM64 that I have on the laptop. My work laptop, I left that in the UK, so I haven't got any examples here. Then I can go in the same shell. I'm now an ARM64 system. This is very useful if you just want to build small binaries, et cetera. I'm not going to go too much further into this because most of my talk is going to be more around the system level emulation. This is where QMU can be used to emulate your complete system.  It emulates everything from a CPU cores, a bus setup, devices. You can even change the memory system emulation. If you're running on a standard laptop, you can make your emulated system run as a non-universal memory architecture. Another useful feature that you may want to use is to change the boot flow of the system. You might not want to start with a BIOS. This is useful if you're testing a full boot system. It can suspend and it can migrate your virtual machines. Again, that's something I'm not going to talk about. There's also a huge area where it has its own little code generator for speed. Again, that is an absolute minefield of stuff and wants its own talks having played about with this on something else. Again, TCG may not support all architectures and all use cases. It's there if it can do it, it will. So, what does QMU as an emulation system emulation provide? Well, pretty much all the standard things you'd expect from a machine. You can have input, display, things like character and serial devices, audio, block, networking. You can even do trusted platform modules if you need to do secret management. Some of these have a single connection option. If there's things like display, you can provide all sorts of different output routes from local display to BNC. Again, you have a number of different buses you can emulate from standard memory mapped IO through pretty much everything you would expect from a system. QMU will provide a lot of standard configuration options for systems and, as we may see later, you can configure to an extent what devices your emulated system can see. This is not going to be an exhaustive list. It's more of an example. Again, with the devices, there are a number of device models that it provides. Again, there are many of these. A machine model may provide you a standard set of devices that you would expect. So, if you're just using a standard x86 PC type emulation, you might find a standard input output PCAE, etc. It's an interesting use case for actually emulating PC within PC, and we'll talk about at least one of those later. Caveats for this device models, whilst they are good, may not be 100% accurate. You can actually also add your own, and we will talk a little bit about controlling them later in the talk. Some of this you can do via command line, and hopefully, if anybody can read this, this was a quick example. I went up a while ago using QMU to emulate an ARCH 64 system. So, the command line here is for a virtual machine. We don't want any graphics. I'm going to give it 2 gigabytes of its own memory. It has two SMP cores. The rest of the command line is saying, this is the kernel I want. This is the Nishardee. The arguments I'm going to give to the kernel that I'm running, which is the append. And then what I'm going to add is I'm going to start a USB system. Give it a QMU XHSI emulation so that it has something that the kernel can see as a way of actual device. Give it a drive for that. So, the drive, I'm going to say, is called USB stick. It's a raw file that I've created somewhere. And the final line of this, I can say to the USB storage device model, here's your USB stick. That's what you can do. The device will start up. You'll have an emulated USB stick, which you can use for storage. I'm not going to go for a demo here because time and demos very rarely work properly. So, I talked a little bit about the whole emulation setup. Usually there were just a set of standard machine models. These will define how your system works. Standard devices, standard boot method, and you should get a system running. This generally good enough for quite a lot of stuff. The interesting problems happen when you actually want to build your own machines because that can run into some issues. Quick talk about networking. It provides networking. Usually this is done via a virtual network device that can either be backed by a real device. So, something like a tap or tunnel. Or it can emulate a system and just use the host's network socket calls to actually make the network connections out. It does usually IPv4, IPv6, you can do some raw ethernet. Can slightly different, but still you can use a virtual can socket connected to the machine. We've had systems where you can create virtual can networks between a number of different QMU hosts running on the same machine to emulate, say a vehicle with a can network. Again, there's a lot of mileage there. You can read up on exactly how complex you can make systems as a post-talk exercise if you really feel that way. So, boot flow. Your system needs to start somehow. You can go from anything from just giving QMU a blob of code and get it to do execute it. We've done that for some very interesting testing of bare metal cases for customers.  You can also use higher level start systems. So, imagine things like on your PC that would be a BIOS, QMU comes with at least a standard open source BIOS implementation you can use. Or you can give it something else. You can use trust zone, which will then call down into another level, which you will need to also have loaded. OpenSBI is the risk 5 similar machine level services block. These codes can then install what they need to do before they call into a kernel of a binary block. You can do all sorts of boot flow emulations if you like, so you could provide U-boot initial loader and then allow that to load code from an emulated flash device. It's very useful if you want to test your modifications to U-boot. You can load U-boot main, grub or whatever. It's very flexible. So, if you've got a running QMU, you can control the state of the system via a system called QMP, which is the QMU machine protocol. It's very JSON based and you just have a socket you can connect to either locally or via network interface, which you can use then to control the state of your system. So, if you would like to inject or hot plug devices or anything else you've done, there's a D-bus interface that allows you to get at some of these interfaces as well. And if you're just running it on local command line, there is an interface you can use just to break out of your console and then issue very much the same command methods. This is useful if you want to automate some testing. Again, not only can you debug QMU itself, you can also debug into your emulation. QMU has a GDB server that will serve the state of your running emulator system. It also has its own internal tracing you can use if you need to, say, do some development work. So, for instance, we've done work adding machine models to QMU. Unfortunately, legal issues have stopped us actually submitting that there, which apparently they've been working out while I'm here. So, for internal tracing you can use the command line to enable tracing. So, you can say trace M25 star, which will trace all the M2580 flash driver operations. Very useful to see how you'll say if you've got a system that isn't booting properly you can trace what the flash was doing. You can trace maybe what the SPI driver was doing. If you get really desperate you can trace all the memory operations, but you better have a big log file ready for those because it produces a lot of output. So, that was a very much just general overview of what QMU can do and how you can use it. So, go go through some projects that we've done. So, first one won't go into too much detail, but this was the use case of using an x86 machine with an x86. We needed to do some work on the kernel entry code. We could have done this by setting up some machines, but if you don't know, PCs take a long time to boot and are a pain in the... Well, let's say they were a pain to manage. So, we use QMU on our desitops to allow us to get a better privilege without having to actually do anything that would crash our own machine. We can use it to control the process of features that our emulation can see so that we can say, OK, our very much latest laptop can now look like an Intel Atom. And then we can use that to run and debug our kernel entry because we can also stop it, use GDB. I also found that a lot of even the embedded x86 boards are not very helpful when it comes to debug. Yeah, so using the QMU here made the development cycle very much faster. We could automate our testing and see how our changes worked and do various testing there. So next thing, this is probably much more interesting to people producing systems. We can use it to integrate into your CI pipeline. So testing your real software without actually having a piece of hardware or allowing it to spin up multiple different hardware to test. We've done this in a number of projects ourselves, but this is one of the first points where there are good real world examples. So SUSEI use QMU with OpenQA. They can test each release they produce out of their CI pipeline without putting it onto a real machine. They can do completely boot flow from as if you were installing it from a USB or CD device from that boot to actually getting to a desktop and even doing things like, can we launch a media player because that would be a good test that we actually didn't install what we thought we did. Hopefully there's the URL there you can go and look and it will show you a thing. So we've done very much similar with QMU with both OpenQA and also Lava for doing various kernel CI type stuff and for project work. So going on to more real world examples of this. So a lot of our work involves real hardware. Customers come along saying we have this all this software we want to integrate it or we're having problems. They ship us a massive thing you put on your desk and you go that's very nice, but I now don't have a desk to work on. And also you're going well we're hand testing this. How do you test this? And the reply is well we have 20 people sat in a room somewhere running through scripts. So they can only generally test a release or to a day.  So that's not great. So. As part of improving the testing. We introduced a virtualized version of these rigs. It allows us to do not quite, but almost commit level testing. It's easier to scale. When you ask a client can I have another one of these very big things that fits my desk they go. Yes you can have one of those in another two months. And then you just hope that they can build them within those two months and say it doesn't get lost in Holland. Because who doesn't love couriers. Couriers get very upset when you say that they you just lost $20,000 worth of stuff and they suddenly find it. Anyway. Part of we found the of doing these automated tests improves the testing. And we'll talk about a bit about that in this side of the next. So we have these automated test systems that have virtual instances. So we can now use open QA and to replace the testing that manually was happening. The client goes. That was great. We can now do commit testing before we even merge this to our system. One of the big things that we found it does remove human error from this. Whilst humans are very good generally at doing things. They're not always correct. So. Part of this also means you also have logged out from your testing. So you know what happened for each test run. So. Unfortunately and we'll we'll there are some downsides you cannot. Get 100% accurate 100% testing the various reasons and we'll talk about next. You can do things like insert a USB stick into the system and with a known set of media on it and check what happens. Now we one of the issues we found with human testing is that. Say if your humans are mostly European. They won't generally know a lot of the non European script. If science slightly changes and say your sort order on your media. They may not notice it looks like Japanese to them. It may not now be in the right sort order. But that was sort of one of the things that we have picked up as part of this testing. Somebody changed the code that sorted their media. Not picked up. You can also feed in simulated hardware events. So for example if your your rig happens to be a car. You can feed in. Say a known set of test drive information and just check that all the dash happens. Or you can look for very simple issues where maybe you want a warning light to happen. So from experience we have improvements in the way you can scale the testing up. However, as I say we cannot test everything. So. You may not get a completely accurate hardware emulation. But you're usually getting something that's close enough to work. As I said there may not be. 100% accurate device emulation. I mean QM you cannot give you a case where say you plug a phone in. Or that you can do some emulation of that. Well probably not going to be perfect. Certainly. A complete car is probably out of the range of what you're able to do for your environment. There's a trade off between effort of emulation. And what you want to do. So. We're saying that. You can get close to what you need for real life, but you don't have to get it perfect. A lot of the time say. If you're just doing this testing. You can control your startup environment was one of the big things we found. If something goes wrong. It's much easier to pick out what happens in your emulated environment. Then try and work out why you've just bricked. Free rigs that you have to then plug into a windows laptop to reflash. Because somebody managed to break their system these startup scripts. So. Again. Performance is not going to be 100% the same as a real system. You may not have exactly the acceleration hardware, but you know. Things like graphics. You can get fairly good results with that IO GPU and GL pass through. They're efficient and they're well supported by pretty much all the software you would expect to run even on an embedded system. So the hardware support is generally good, but CPU can be a bit slow. Again. It's more about giving a quicker feedback for developer experience. Without having to give the developer a complete system. So I'll go quickly through one of a weird edge case that we found. Sometimes multi monitor systems don't work at boot, which is very annoying. If you're saying working on a system that has three or four different monitors on it and they all need to start up at once. There was some issues around how QMU deals with its graphics state. The documentation in this case was not exactly helpful. And the source is even worse. It's confusing. It uses terms like my monitor display head. Very interchangeably. So. Actually, we just ban. We just really quickly had to fix together. Which was to start our virtual machine paused and then just issue. The D bus controls to connect the monitors as we needed. This is something we would like to fix later, but we really can't. See charging the client for it because. We're working on client time. And whilst the client likes what we've been doing with this is going. That's great because we now have a much better CI pipeline. And we don't have to pay a people like for another 20 people in Germany or something like that. Because, you know. Paying people to do stuff and then still not getting as good flow. So in all in all that that sort of CI. Process has shown to be a generally a win. There are much more. Good results out of it than bad. So. Next. Project that I've. I this is much more personal project for. This is a project I have been working on. So. Client comes to say. We're going to make this new hardware. Can we have some Linux for it, please? And we're going. That's great. We can provide you some Linux. When you'd like to start, well. Start as soon as possible. Okay. Well, can we have some hardware then? No, because the hardware we're making next year. So. Okay. Now how do we test this software? Well. There is a single FPGA system somewhere. So. So. There is a single FPGA system somewhere. That we don't know about buried in some secret lab we get access to. Which is great for developers and one FPGA. So. We've been looking at this and when we're actually. The best way of getting started. Would be to use QMU. Now our first problem that we've got is that. Not all the. Silicon IP may be in QMU yet. Either it's new or somebody hasn't used it. QMU does not. Generally support every single variety of hardware out there. It tries to go more for a virtual machine and then. There are some actual machine emulations. But the. Device models are smaller than say a Linux. System where there would be a lot more devices. Being. Available. So. Our first. Problem was what do we do do we add some new. You do add new device models. Do we replace something. Do we ignore it. So. As in replace we could say okay we'll not use that piece will use this similar enough. Also hope that the IP that we've got includes the CPU. Because. That would be even worse trying to update the CPU cause. So. As part of this project. We decided to start adding our own machine model. So that describes how the entire system fits together.  We had to start debugging because now we have. Not only the real FPGA silicon to try and debug but we also have QMU to try and debug because. Adding things we might find issues. So. Advantage. We've got lot less access problem and we have our full developers doing stuff. Without having to worry who's got the login on this very expensive FPGA. By very expensive I believe it costs more than a. Average family car board. Another advantage is the client goes that was a good idea. We should probably release this at some point. Disadvantages. On this. Again accuracy. We're not going to get a completely 100% accurate model. Is more work. It's thankful that we had some delays in the project where we could work on this otherwise. We probably be having to build a client more money and. Generally unless. They're very understanding they don't want to pay you more money because. Well budget. One of the interesting problems we came across is actually upstreaming. So from both a QMU developer point and a client point. QMU would not doesn't want to accept driver models for machines that don't exist. But the client doesn't want to tell people this machine exists until they got some next year. So we can't say here's your machine owned by the way we wrote five new driver models for this. It also turns out that the client forgot to take. To talk to their legal. People and go. We're commissioning these people to do Linux. All that documentation we gave them shouldn't we have cleared this for release before say now. It's like. Hopefully that's now all sorted out. So the experience. Working both ends of the emulation. From making a device. And then to using your device may not always be great. Especially a small team mistakes can get duplicated. You may read a data sheet one way. You may not have a correct data sheet. There's a saying there's a lies down lies and data sheets. Now something else but you know might be statistics. Your QMU core emulation. May not cover exactly all the use cases. Either it hasn't been released yet because maybe it's not available. Or that the client hasn't got round to doing that part of the work either and then employees somebody else to do it. So. In our case the actual core features were not a problem so we just pick the closest available. For instance. This is another interesting issue we found early on in the boot system. Risk five atomic memory operations. So the operations you do to say make sure a core is synchronized with everybody else. Do not work on all memory types. Which is annoying when you go to your real system and find out that the actual core features.  Is not covered. By atomic memory operations and what the first thing you do. Is an atomic memory operation. You go. Well that way that crashes it works under QMU because QMU. Makes no check as long as it's memory atomic memory operations will work there. Again we're not going to be timing accurate so. Things like say SPI bus timings not going to matter. If you miss a cycle. It may not care. Internal hardware states maybe they're not modeled either. But. So okay doing well for time. So. Thank you. Some of the conclusions so. As I say. QMU may not be totally accurate your vendor may provide something that is more accurate. But it isn't going to be open source. Even though it may not be totally accurate it's probably going to be close enough. In most cases we found that. It gets enough. Coverage to say. We'll catch about 80% of the mistakes. We're having to involve a real human. Again it's also it's much easier to scale something like QMU. I believe in a couple of other presentations they've also shown systems like. Using AWS instances. But again this is going to probably be cheaper than making a lot of your own hardware. Especially at the moment when things are not easy to get. The. Scriptability. Is also very good. Allows you to inject errors control the system. Get state out of it. So. Thank you very much. Hopefully I've just realized that I have not uploaded this. Slide set to the talk to the. Conference set. However is pretty much the same as the one I gave OSS Dublin. Hope this gives people some. Thought for how. QMU could be used to improve. Their workflow or. Used to emulate other systems. Again. QMU is a big enough project. That you could get yourself lost in there very. Easily. I think we've got a little time for questions. Don't know. I haven't. So there was. Is there any fundamental difference to say. Linode. I wouldn't. I unfortunately I don't know. I don't. That's not the. Some some. Linode is not something I've used. So. Again. I'm not saying. QMU is the. Absolute best is just. We found it pretty useful for what we've done. So. I think that's pretty much. Well. Thank you for coming. I hope that that was something interesting or useful. And. Hopefully that you can. Find something. To take your interest and carry on. So. Lovely being here.