So I work from Mozilla Research on this project called Servo. Now, this talk is going to be one of those dangerous live demos, because this is Servo running. The slides are in HTML and using just enough features that Servo supports. It supports, for instance, key events so I can change slides. So the goal of the Servo project is to create a new browser engine that sort of achieves this next generation leap in performance and robustness. And I'll talk a little bit about what that means. One question that you might have is, or first of all, our high level plan here is figure out what is even possible.  We have achieved some things, and we think there are a lot more that's achievable, but we don't even know quite where the limits are yet. And then this isn't strange for Mozilla Research, but maybe for other resource organizations. Our end goal here is to build a product ready engine. So we're not building a prototype that will then get thrown away, and the knowledge from that prototype will then get merged into Gecko or something. We're trying to build a real engine. Because it turns out, if you want to find out, if you can make a fast parallel browser, it's not good enough if it's not faster than the things that already exist. There is a bar that we must clear even to walk in the door. So if it's a little slower, but we can show it has parallel speed ups, it's not interesting. So why would we go through all this trouble to build a new engine? Well, there's a lot of reasons. One is that all the current engines are really, really big. So I made this slide for the first time I talked about Servo, and this number was 6 million lines of code. And that time was a year and a half ago. So we've had a 4 million lines in a year and a half to Firefox. And also, I realized when I was going through this talk that I only included the C and the C++ code here. And Firefox is written in JavaScript. So there is a lot of missing stuff being accounted for. But the point is that you can see this both ways. It's both a reason not to write a new engine, because look how much work we have to do. But also, if you want to refactor or experiment in this code base, it's really hard. It's just too big. The other thing is, browser sufferers all technology suffers from this path dependence problem. And path dependence just means that the history matters. So these things were designed 20 years ago. I think the first Mosaic browser was in 1993. They were built for computers that had single processors. Clock speeds were still rapidly increasing. And I'm sure you've heard all this before. Importantly, we were in a utopian web back then. For one, there was not really that much JavaScript. Like documents were documents. And you were mostly browsing around. And you didn't have to worry. Only Microsoft Word users had to worry about other people's documents hurting them. But now we all have to do this. Like we're under constant attack and surveillance and all these things. And browsers were sort of created in this more utopian era. And they've also accumulated lots of things as they've grown up. So for instance, there have been lots of sort of proposed web standards that got implemented in browsers and then later removed. And we don't think about these things anymore. I mean, some easy examples are like marquee and things. And that one doesn't have this problem. But lots of that stuff made browser developers make architectural decisions way back then that are now no longer valid. But a lot of that code is still there. Like some of this has to do with Firefox still has support for Windows 95 or Windows 98 until it gets deprecated in five more years or whatever. But there's a lot of stuff that's in Firefox that exists because of that. So we don't want to have to deal with any of that stuff. Another reason is that C++ makes us sad. So all the browsers are written in C++. And this is mostly because there's not anything better. That is somewhat debatable. But the problem is that C++ is wildly unsafe.  And most of the browser security bugs that you have ever heard of are directly related to how C++ is unsafe. So just for some context, this is David Barron up in this picture. And he's one of Mozilla's, I think, three distinguished engineers. So he's one of the top engineers in the entire company. And he put this sign up next to his desk, which hopefully you can read. But if you can't, it says, you must be this tall to write parallel code. So even our best engineers don't think they are good enough to program in the security model well. So we'd like to rewrite a browser in a safe language. But no such language really existed. So we decide to create one of those. So not only are we making a new web browser, 10 million lines of code, but we're also going to take on C and C++ directly as well. So Rust, hopefully you've heard of it. There was a talk here last year about it by Nico, is designed to be both fast and safe. So C++ gets fast right, and like sort of Java can get some of safe right. But we need them both. So we need memory safety, which means we need to be able to do concurrency with no data races. We need to be doing automatic memory management, but we can't have garbage collection because we need control over when things get allocated and freed. But we don't want to be responsible ourselves for freeing memory because we'll forget, and every time we do a use after free, that's a security vulnerability. There's lots of other modern features in Rust. I encourage you guys to take a look at it. It has hands, it has traits. You get all the nice things from functional language like pattern matching and lambdas and all these beautiful, beautiful things. We also have algebraic data types and things like that. These are all great things to write a browser in. So we wanted performance and robustness, and I'll talk about performance first because that's probably the thing that gets people the most excited. So what does this mean? There's a lot of ways to sort of evaluate how fast a browser is. So page load time, how fast does it take since you enter in the URL bar for an actual pixels to be painted on your screen, the JavaScript execution speed, which is what everyone seems obsessed with these days. There's also things like responsiveness, how quickly it responds to user interactions, things like that, and power usage. And what is the drain on your battery? So the top two of these things, the first two, these are things that traditionally people have competed on. So at first everyone wanted the pages to load faster, now we want to be able to play triple A games inside our browsers running in JavaScript, and people have been doing this for quite a while, and there's still some things that we can do here. Servo in particular is not rewriting the JavaScript engine because that seems like it would be even more insane. So we're not really working on that problem. But we're really concentrating on these bottom two, responsiveness and power usage. Just, I'll talk about power usage a little later, but just to give you some idea of responsiveness, said Firefox is written in JavaScript. It has one JavaScript engine running. So that means that your browser Chrome and every tab that you have share the same JavaScript process, which means if you want to scroll your page, but there's another JavaScript process on the page that's taking a lot of CPU, well even if you're in a different tab, like you're still gonna get not, it's not gonna scroll, like until the JavaScript returns control. So there's a lot of work to do here. And even in Chrome where you have tab separation, and you don't have the problem quite this bad, there are still plenty of cases, like for instance if you have two iframes in the page, and since most ads are served in iframes, any rogue JavaScript in those iframes will make the JavaScript in the page slow and cause all kinds of problems. So there's a, these are some of the things that we care about. Unfortunately, if we wanna make things fast, we have sort of this guy who gave us a bunch of bad news a long time ago named Amdahl, and he asked this little rule that says, if you wanna make things fast by putting in multiple CPUs, then there is a limit of how fast you can go based on how much you can't parallelize. And so sort of the corollary to this is if you wanna actually make a browser fast, there's so much of these things in there, you basically have to parallelize everything or nothing will be fast. So not only do we try to do that, but we try to parallelize at every level of the stack. So some browsers have started doing this already, so for instance, Chrome has tabs on multiple processes, so you can just run different pieces and different processes and parallelize that way. You even have things like the compositor being out of process, which I think some versions of Firefox now do. Plugins have been out for a little while. The next thing you can do is you can try to take the major subsystems of the browser and run them in their own threads. And some of the browsers do this, or I think all the browsers do some of this already, but mostly for like media decode, so decoding videos, decoding images are done in their own threads. But you can imagine extending this to things like running JavaScript in its own thread, doing the layout in its own thread, doing all of the painting in its own thread. There's also algorithmic parallelism where you take one of these subsystems and come up with a parallel version of the algorithm, and we're gonna talk a lot about this in a minute, because we, Servo does layout on every node in the DOM basically at the same time, instead of just running the whole DOM on one thread. And you can also do things like painting and rendering on the GPU, which are also massively parallel. The other browsers are sort of starting to look into this, but it's not quite working yet. And then there's also the very lowest level data parallelism where you try to take the same operation and apply it to lots of copies of the data at the same time and get big efficiencies that way. And of course, this has always been the case for things like media decode, but we're trying to use it in other places as well. So we're gonna talk a lot about this algorithmic parallelism specifically in layout. And one of the reasons we think there's a lot of work that we can do here and a lot of benefit that we can bring is if you, I think the one on the left is Pinterest and the one on right is a partial screen capture of TechCrunch, but all the new sites you're probably familiar with have similar structures, but these pages have a lot of structure. All of these little blocks of images contain basically the same thing. Don't interact with each other. So you can imagine that the browser could actually calculate where those things should be on the screen all at the same time. And it can, but this sort of gives you some intuition of what this works. Now why this is important is, so here's something, this is a timeline view of a webpage renderer just looking at, image decoding and layout operations on a four core machine. And you can see that we're using 100% of all four cores. So we're doing this in parallel and modern browsers already work like this, right? But the problem is, is that we don't get to see anything until the purple task is done, right? So we can decode all the images that had a time on those other cores, but until the purple task is done and nothing appears on the screen. But if we can parallelize the purple task as well by using algorithmic parallelism, then we can get to something like this. And it takes the same amount of time to do the work. And we're still using 100% of all the CPUs, but you get to see the page 25% sooner, or 75% sooner. So the responsiveness of this is gonna be much better and people are gonna feel like their webpage is faster. Even though the complete page hasn't loaded for the same amount of time, you get to start seeing something. We need to do some experiments with this. This is a diagram stolen from the CSS specification about their box model. And if you're familiar with HTML, you probably know about this, but each of these elements on the page has its own padding area and then a border and then a margin area, which is outside of the border. And most of the times when you use this, and actually there's special syntax word in CSS, the top and the bottom borders are the same, or the side and side borders are the same. And no matter if they are or not, when you're calculating layout properties in this, a lot of times you're interested in what is the entire width of a bunch of elements. And so you're gonna be adding in both the left and the right border at the same time or the top and the bottom border if you're calculating the height. And it turns out that you can do all of this, you can do those calculations all at the same time. So if you need to add all these things, you can add them up simultaneously with SIMD instruction either horizontally or maybe you could do both at the same time. So you can kind of take advantage of these things even in layout. So the way we do layout is quite a bit different. Interesting, I think, so I'm gonna talk about it a bit. This is a little DOM tree. This is how HTML elements are represented inside the browser. And we actually don't do layout on this tree. We make another intermediate data structure called a flow tree or I think Blink calls it the render tree and Gecko calls it the frame tree. But it looks pretty similar to this and so I'll just use this as an example. And what current browsers do is they wanna lay out this bit of the DOM tree, they'll start at the document and they'll call this virtual method called layout and they'll say document layout and magic happens. And that magic consists of basically the document thing looking to see what its children are and calling layout on them and so on down the tree. But the important thing here is like all of these elements in order to find out where they are on the screen and how big they are need to access the data from other places in the tree. So for example, in the P element, in order for it to know how high it's gonna be, it has to know how high the A tag is or how many lines of content are there. And for the page to know how wide the P tag was gonna, for the P tag to know how wide it's supposed to be and you just know how wide the body is because it's gonna be at least as wide as the body, minus its borders, margins and padding and stuff like that. So what they do in the browsers is when the P tag needs to look and see how big body is or how big the A tag is, it just goes and asks it.   And that's not that big of a deal when your tree looks like this but when you start having floats and absolute positioning and Z indexes, the data access patterns that the browser is doing are basically unpredictable and crazy complex. And this makes it very hard to parallelize. So now if you want to lay this out in parallel, you have a problem. You have all of these different things that are gonna be calculating and mutating their information at the same time and you need to make sure that the P tag doesn't update once and then something else updates and then it updates and overwrites it and now your stuff is all in crazy positions on the screen. And you can't do anything as sort of naive as we'll just put locks around all the data, you mutate because this is already really fast in the current browsers and you cannot make it slower. Like people will notice and no one will use your browser anymore. So most of these sort of naive solutions don't work. So we do something a little different. So we don't know how to parallelize this with the data access patterns that are all kinds of crazy but we do know how to parallelize simple tree traversals.  The trick is you need to make sure the data access patterns match. So for instance, when you're going bottom up, like for instance in this first reversal, you're not allowed to access any of your ancestors data or mutate any ancestor data. You can talk about yourself, you can modify your own data because you know and you can't access your siblings data obviously but you can do your own thing and any of your children, you can mess around with their stuff and everything is just fine. And when you go top down, you have exactly the opposite set of data access requirements and that you can't look at your kids and you can't look at your neighbors but you can talk about your ancestors or mutate their properties all you want. So we factored out this crazy data access patterns into basically three traversals. It's slightly more complicated in servo but this gives a good approximation. We first go from the bottom up in parallel and we call it the bubble widths but we take the intrinsic widths of all the things that we know about and just propagate them up the tree and then the next pass goes top down also in parallel and it's called assign widths and this is where we actually assign how wide everything on the page is going to be and once we know how wide everything is on the page is going to be we can go back bottom to top also in parallel and start assigning heights. And actually servo is smart enough that when it gets to say the bottom of one of these traversals it can immediately start calculating that it doesn't actually wait for all of the traversal to finish. As soon as it gets to a leaf node on a top down traversal, it can immediately start running the task that's supposed to go bottom up and it will know that I have to wait for my parent to get done in the top down traversal before I can start going farther up the tree. So this turns out to be really, really, really fast. There are a couple of problems with this is that like I said, you have to make sure the data access patterns are sound like in C++ this would not work real well because you would always have to be looking out in code review for somebody who did something they weren't supposed to do and when it mutated something over here. So in the Rust programming language we actually have different types for these elements when you're in different kinds of traversals so that you are unable to call those methods. So those methods aren't defined on the type that you have. You only have the methods defined that are safe to do in the traversal that you're in and the system behind the scenes, there's a sort of a trusted kernel of code here that switches the types behind the scenes so you don't have to keep track of this but it means you can't really make a mistake. And then the other problem is is that not all our lovely spec editors and designers of the web weren't thinking about parallelism way back then and of course they designed all of these structures that don't have clean data access patterns. So CSS floats is one thing, if you want to float something left well that affects all kinds of things that aren't in the immediate subtree or in the immediate ancestry. So when that happens what we basically do is we hold off processing until we get to the root of whatever subtree that this affects and then we do an in-order traversal there. So we just sort of save up all the work. Of course this is terrible. All of the work we do is sort of in these in-order serial traversals but it turns out on most web pages that we've tried and seems like on the internet that these parallel hazards are either in rare edge cases or don't affect enough of the page to really have too much effect that we don't still get a big improvement, a big performance win. So some of this is, I like this image to explain this. In World War II, I think it was the RAF was losing a bunch of planes to German and aircraft fire and so they wanted to put armor on the planes and they were trying to figure out where to put armor on the planes. So they got a bunch of mathematicians involved in this problem. The first idea was okay, first where all the bullet holes are on these planes, let's put armor where the bullet holes are and now they won't get a shot. And this one mathematician was like, no, no, you guys are thinking about it all wrong. These bullet holes didn't make the plane die. Like these planes came back, put the armor in the other places because if a plane got shot in those other places we didn't even get to like mark it down. So this is totally counterintuitive and in the same way if you want to, like one way to make web browsers faster is to go look and see what everyone else where the slow parts are or what the teams at Mozilla or Google are working on and start really concentrating on those places. The counterintuitive thing that we discovered is what you need to do is you need to go look at the areas that are so hard or so terrible that they won't even look at them. It's not like the Gecko team or the Chrome team have never had this idea that they're gonna parallelize layout but it's a non-starter when you realize that you have C++ to work with and 20 years of legacy code that you would have to change. So we try to look in the weird corners. So let's talk about robustness a little bit. This one is more important in the modern web than it was way back then. It means a lot of things. So we want to prevent security breaches. We don't want to be able for someone to take over your computer or make your browser crash or any of these things. We want to make sure that if something bad happens either malicious or non-malicious that we can isolate the failure. So for instance, if you're watching YouTube in one tab and you're moving some money around in your bank in another tab that the YouTube video causes the tab to crash that you don't crash your other tab where you're doing something important. And beyond this, we want to do things like we want to loosely couple all the components in the browser because this makes it easier to refactor. It would be nice if at the end of this research project not just a new browser engine was created but one that's easier to maintain and add things to. This also means that there's not these big dependencies between pieces. So if people make mistakes the sort of the boundary conditions are more well known. And then we want to do things to prevent and tolerate programmer error. Like you saw like David Barron doesn't think he's good enough to write multi-threaded code. So who are we trying to get in here? And browsers are big. It takes a lot of people to write them. Mozilla has a relatively small team but we're a thousand person company running a browser and we're like, I think the smallest person on the block with a large margin. So if you're gonna have a thousand programmers working on building new browsers like they're going to make a thousand times whatever mistakes and you want to make sure that those mistakes aren't all gonna turn into zero day security vulnerabilities or make users very sad. And just like with parallelism, you need this at every level. So people design security stuff in layers and this basically we're trying to add more of these layers. So we have process isolation which I think Chrome started with the tabs in different processes. This is nice for all the reasons you're probably familiar with. And then of course you want to if someone does somehow mess with one of your tabs, you want to make sure that the amount of damage it can do is minimize. So you want to sandbox things. But then we get into things that we're trying to add like memory safety. We want to make sure the programmers and obviously if you have a malicious programmer you have no hope. But if you have a normal programmer who's just trying to do their job like we can prevent as much as possible them destroying your computer. Hopefully with the type system if not that then with these other nice layers. We'd also like to have this beautiful world where when you wrote code that had a bug in it it just didn't compile in the first place. And we can't quite get there but we can certainly get a lot closer than C++ gets us right now is I'm sure you're and you want your hard drive. I will do that. We can make a lot of things that you shouldn't be doing actual compiler errors which makes everybody safer. So a good example of this is we wanted to see how effective our Rust programming languages memory model would be at preventing these kinds of errors. So we actually went and looked at all of the security critical bugs in the web audio API. And it turned out that all of them were array out of bounds errors either because someone was careless or because of integer overflow or any number of other reasons or they were used after freeze which freed some memory but something else is still trying to use it and then you can do some stack smashing or whatever. All of these errors would be prevented had this code been written in Rust. It turned out. And the reason we looked at web audio is web audio has no security properties. Like there's no reason for this to be like trustworthy code or anything else. Like this is just some set of functionality exposed by JavaScript to web programmers and shouldn't have any security implementations at all but there were 34 critical vulnerabilities in it. So if we can prevent all of these, that'll be great. The other thing is there are tons of new APIs like this appearing all the time. They don't have security properties of their own but careless implementation or even careful implementation can still leave you with bad bugs. And we think we can prevent those. So current status. So we've been working on this for a couple of years although the team sizes has grown over that time. In March of 2013 we were able to pass ACID-1 which is a pretty good basic web layout test. In March of last year we were able to pass ACID-2. We regress on ACID-2 every now and then so it may or may not look the same if you try the current master but that one tests even more crazy things and then the ACID test stopped being interesting so we start testing real sites. So these are sites that are from our static testing suite so these are basically static snapshots of web pages that we downloaded from the Alexa Top 100. So here we have the Guardians of the Galaxy page on Wikipedia, the CNN homepage I believe, a Google search for the word servo and some random red thread. And you can see that servo can already render these pages pretty close to what they're supposed to look like and I believe these screenshots were taken last September and we've added tons of stuff so they probably look way better and I should make new screenshots. So we have over 100 CSS features supported already. We have landed mixed blend mode, filter, text rendering, outline offset, word break. The reason that these things probably don't mean anything to you is we don't have, we don't go after well-known features. We look at the use counter data that Google publishes about how often these are used and we kind of go in popularity order that web pages actually use. So while these may not sound like amazing things, these are used in almost all web pages. We have pull requests open but not reviewed for things like text overflow, text line justify, CSS counters which are pretty cool, text shadow and we just got CSS 2D transforms which I can use when they land to update my slide deck to make really sweet things happen and there's a whole bunch of other pull requests that have new stuff. We're aiming to have sort of all the features used by 50% of the web sort of, so they order them by how many pages that they look at use this particular feature so we want to get to the 50% mark this year. I think that Patrick has made it a personal goal to get to the 75% mark by the end of this quarter so we should make a lot of progress there real soon. And then architecturally, there's a lot to consider so we need to have all of the parts and all of the optimizations that traditional browsers have so that we're just as fast. So we just finished incremental layout which means there's two ways to speed something up. You can either make it there or you can just not do it. So incremental layout is about just not doing it so you're skipping calculating things that haven't changed since the last time you laid out the page so that's really important. We also have partial writing mode support so this is important because writing modes basically flip web pages onto their, in some other orientation. So inside servo we don't ever talk about top and bottom and left and right because that doesn't have any meaning in this new world with writing modes because somebody might have flipped the writing mode to right bottom up and now when you talk about the top of something it's really at the physical bottom. So internally in servo, in Firefox, everything is still called top and bottom and you have to keep in your head which writing mode this code is working for and then translate it. In servo, things are called inline start, inline end, block start, block end and we don't talk about width and height, we talk about block size and inline size which are things that stay the same no matter what writing mode you're in. So we wanted to make sure we had that in there from the beginning so that people didn't get confused. We've done a lot of work trying to unify and make safe the memory and interaction interface between the systems code in Rust and JavaScript. So if you don't know like all the JavaScript APIs you use but all the apps written in C++ or Rust generally for speed reasons and C++ and Rust don't have garbage collectors and JavaScript is garbage collected. So for instance what Gecko does is you garbage collect all the JavaScript objects and on the C++ side those are all reference counted but then of course it's very easy in JavaScript to get yourself into a memory cycle which then wouldn't be free so they have a cycle collector that goes around and tries to break cycles. So we actually all of the Rust code in servo is managed by the JavaScript GC so it tells us when we're allowed to free stuff and it has hooks to trace through all the Rust pointers and we've done a lot of work on making that interface safe which is pretty hard. We'd use programmable compiler lengths for instance we have several layers of security just in that set of stuff. We're trying to make servo embeddable from the start all the other browsers seem to be removing embeddability and we've done this using the Chromium embedding framework which I can't remember who made this I think it was the Steam guys or something to embed Chromium into the clients and use the same. It's 32 bit only right now but we're working on adding 60 bit Android this year and recently Michael Wu at Mozilla got all the servo code booting up on the flame reference Firefox OS device so now we have boot to servo although it can't do very much yet except I think it just displays Asset 2 as soon as it comes up. So we've tried to get all these sort of big architectural questions answered as early on in the project as possible. So what does this look like? Now we have pretty graphs. So the layout performance this shows servo running on one thread on two threads and four threads and this breaks it up between what I've been calling layout is called reflow here. Their style recalculation which is processing the CSS information and display list construction which is creating a list of commands for the graphics driver. And you can see where this is for the Wikipedia Guardians of the Galaxy page and you can see that we make some improvement the more threads you add but it's not as much as we would like. This on pages depending on you know sort of how many parallelism hazards that HTML contains. So here's the same thing for the CNN homepage version of that you can see we're spending lots of time in display list construction. And then for Reddit we actually get extremely good results which I'm sure Redditors will be happy this is a browser they can use. And then compared to Gecko we're doing amazingly well so far although I have some caveats about that. So here you can see Gecko's version of those same three things and you can see servo with just one thread is already faster. We're trying to make these as realistic tests as possible and this should be taken with a grain of salt because as much of the web as Gecko does we're not sure yet if we're way faster because we're really that good or if it's because we have control of the compiler and can help along our own optimizations or if there's some edge case that we haven't handled that actually slows it down. But the good news is like we have to be at least as fast as Gecko and so far we seem to be doing very well in that regard being improvement which is great. So it's the same thing for it's even bigger for CNN because Gecko takes a long during layout. So this is the thing where we'll probably always be faster because since we're able to parallelize layout we can do it way faster than they can and that page is layout heavy and Reddit we just do amazing on. I don't know why that is off the top of my head. This is a timeline view this is all servo it just shows you the different like how much time we spend in each functional area whether it's network or JavaScript or layout. So in these you can see like CNN especially has tons of JavaScript so we can expect not a huge amount of improvement there. The reason to show this here is that you have to parallelize all of these things. So for things like Wikipedia and Reddit you can see that parallelizing style and layout is gonna help a lot and for CNN parallelizing lots of things will help a lot but especially JavaScript if we could ever do that. Here's the thing without network activity and without JavaScript. This is basically the things that servo could actually make a useful dent in and you can see there's a lot we can do here that's not just layout. Okay last thing is power usage. We found that if you run CPU cores at lower voltage and of course this is gonna vary by CPU but these were on MacBook Pros. If you turn off turbo boost you lose 30% of your performance but you get 40% more battery life but it turns out that servo's parallelism is well enough that we can bridge that gap and make up all of the performance and everything faster. So even though we have 30% less clock on every CPU by using more CPUs we can't adjust this fast but use 40% less power. So this was, we just started looking at this and we were like floored at how good this was. And we'll try to do more. So in the future this year we're gonna try to do some kind of alpha release in 2015. We're also, because we can't sort of boil the whole ocean in a day, it's like we only have a team of I don't know, 10, 12 people working on servo and even if we had 50 people like Gecko has way more than that and the web keeps getting bigger so we will never catch up. So instead of trying to catch up or thinking they'll stop and then we'll do a rewrite or whatever we're starting to, we're gonna start landing rust and servo technology inside Gecko so we can start training up Gecko developers and stuff like that and get some of the benefits of the research that went out into the production as soon as possible. We also need to add a bunch of CSS features and we sort of prioritize the things that should have architectural implications. So pagination for example is where you have text in a more sort of newspaper editing style where it can flow through some element and then stop and then the overflow goes into some other element over here which has all kinds of architectural implications. Flexbox as well has a bunch of layout implications and then we work on the things that most web pages use. You can help us. It's very easy to start contributing to servo. We have, it's all on GitHub. We have an issue tracker there. We make regular forays into the source code to pick out issues that would be good for people's first time contributing to the project. We define this as most of the work is making a pull request and learning how to use get and these kinds of things. There's so much work to be done here because if you have a DOM API that you know how to use it probably doesn't work fully in servo and you could add it. So there's a lot of low hanging fruit all over the engine. You can find us in IRC on mozilla.org and if you need to ask me questions if you don't have time here or you have more things you wanna ask then there's my contact information. I'll answer any questions that anybody has. So thank you, that's a really interesting talk. How fast do you compare to Chromium? So I don't have benchmark numbers to show you against Chromium but we compare to, all the browsers are easy which is everything except Safari and we're faster than all of them. Take it with the caveat, support the whole web and it may turn out tomorrow that we did something stupid but as long as we involve those people in the decision, we're faster. I understand sometimes with Rust you'll need to write unsafe code that it doesn't have the memory protection then you use that to write certain abstractions that then you can other developers can use and as long as you gotta write those small sections right then it'll be safe but if some of them you will get wrong and so you mentioned 34 bugs in web audio and you'll get revolved and you might not. Yeah, so we use two big pieces of C code and this will grow because of WebRTC is like millions of lines of code. We're probably not gonna rewrite those in Rust certainly not before this thing actually ships if it ships but we use the spider monkey JavaScript engine and we use the Skiya rendering library which Google uses in Chrome and if there are bugs in that then we can't save you but hopefully we can save you from everything else. We also have things in the Rust language that we write in the unsafe language like for instance all of this fancy pointer stitching that we have to do to make this JavaScript menu have to write that and because it's specifically marked in the code as unsafe if there is a bug we know exactly where to look like the and we try to keep that boundary as small as possible. So like it's not a panacea but it's another layer and hopefully it's a very big layer that will stop things. Hi, like all software the last 5% is where like it all falls apart. This is especially in the web like it's easy to write a web browser that does like 90% of the websites on the planet but it's at last 10% where everyone's a special unique snowflake and does something different. What's your thoughts on that? How are you gonna deal with that? So the glib answer is Gekko and Chromium have this same 5% problem we do because the web keeps growing and they certainly have features they don't implement well. We, as I said when we work on these features we're trying to figure out as much as we can figure out what that 5% will be and work on that first so that we know that that is not gonna invalid the project. But you're right in that it's gonna take a lot of effort to catch up and get there and we're not exactly sure what that looks like which is why we're starting these projects like getting Rust and server to Gekko now and try to get it from both ends. So we're gonna try to write a browser from scratch we're gonna try to take what we can and put it into Gekko and like that I think we'll get us to here and there'll still be this giant gap and I don't know what happens there but hopefully profit or something. So I still don't know so I hope that we're able to come up with that. I mean the sort of hand wavy high level language argument is like Rust makes you more productive so you'll be able to catch up faster but there's always gonna be some section I think and we're just doing the best we can to identify what we think are gonna be those really hard things and do them up. You mentioned that you're gonna be landing Rust and Gekko soon but as you also said like Firefox is not just Gekko so I was just wondering what your plans are in terms of bringing in using Rust along with the existing code base especially since a lot of Firefox is JavaScript talking to C++ via the IDL and so forth. Do you have some kind of plan to let the existing JavaScript use Rust or vice versa the way it is now with JavaScript and C++? Not in Gekko so our first project is probably gonna be to replace the BMP decoder and the idea is that just like we have these easy bugs that we've identified in servo to help use where the hardest part is like going through the process like we wanted something where the hardest part was getting through the build system of Firefox. So we picked an easy component that has almost no downside if we mess it up but we have a bunch of ideas. We wrote a couple libraries in running servo that are much more spec compliant than things that other people have done. One of these is we wrote one of the first new HTML parsers that's been written in a while and most of the like the one that Gekko uses is machine translated from a Java reference. So we wrote one from scratch in Rust that we think is much better. We also have a URL parsing library and some other stuff like that and that's the kind of stuff that we would start trying to work on after we get over the initial hump of the BMP decoder. I don't know what comes after that. Obviously there are huge chunks of Gekko that would be really hard to replace like it gets no easier to replace layout with our layout as opposed to them writing their own. So I don't know what we do to clear those, the middle 50% of the difficulty but at least we can start attacking the problems you're working in. Okay, sorry guys, we're out of time now for questions. So I'd like to thank you very much for your presentation. Thanks.


Welcome back! After the short break, we're coming back. John the Bard and me.  Let's go. What's up, John? I just opened my studio closet, so my 15 is nice and open to the room. So I can check your bass at any time. I'll mute my mic and slap it. Yes, please mute your mic. Oh, don't worry. Top priority. You guys don't want to hear how loud the studio is. Your 15-inch subwoofer. The 15 with the 212 mains. The 3-way 12 mains, mind you. 96 dB at 1 watt SPL. Serven Vig is a nutty company. They don't sound that great, but they are loud. That's the quality in itself. Alrighty, we'll start out with a track by Sahativa, and it's titled Melodic Tea, and it's a work in progress. This sounds very familiar. Sahativa writes that this was made with B-Spoke synth, Helm, LSP, X42, Ether and Hardware. It sounds familiar, but in a good way. This reminds me of some classic piano tune. I can't recall the name. Oh, the progression. I see what you're saying. Yes, the chord progression, yeah. It's a very classical progression. It sounds... I would say, Mozart-y. Oh, yeah. It's very dramatic. The progression is stretched out. Oh, wait. I broke something. I'm broadcasting our chat. The mix is gone. I can't find mix. Oh, there it is. There it is. I have to change it immediately. I'd like some sidechain compression on that bass. So that was Melodic Tea by Sahativa. Makes me think of... Oh, what's that track? I'll think of it. It'll come back to me. Just keep going. It's an Eric Pritz track that it makes me think of. I can't remember which Pritz track it is now. A very dramatic one. I like the drama in those chords a lot. It's very good. Yeah, I love the chord progression. It's really interesting. It checks the position of the complex chord progression with lots of tension and a chill synthy tune. That's kind of house-ish, kind of synth-wavy. I don't know. Interesting. Yeah, it's... I don't know much like that. Like, I can... I don't know. It feels very familiar, but it doesn't feel... Not many tracks are kind of like that nowadays. The big wobbly chords. And I think it's really cool. It's a very unique feel, I think. I would like more melody in it. I would like something that isn't LFO'd to be punching through with all of the LFO going on. So you get a constant kind of... Maybe even just an arpeggiation or something over the top. Maybe there is a lead line that comes in there. It seems like a long track, so... Yeah, I don't know how long it is, but I'm fading things out around the three-minute mark. All right, let's move on. The next track is from Quantizer. And this one is titled Tether. And I just put it twice. And I just... Just did... Not fix... The metadata. There we go. Yeah, and Milofi said, You rehearsed this for three hours? Not long enough. It's never long enough. Quantizer writes, So, LMS, vital and audacity. Me, is that sub-bass-sounding stereo to you? Kind of, yeah. I need to turn this up a lot. I love the brakes. I really hope the drums will be louder, though. They barely punch through. Yeah. I wish the drums were more prominent. I don't know, I like that. Some awesome stuff. I really enjoyed that. Some of those synths is off. Some come in too loud, some come in too quiet, Overall I think the track is very good. I think it's just... I could have minor complaints with mixing and EQing throughout. That's about it. But the actual... Yeah, the composition is very good. I enjoyed the composition, the sequencing, and the sound design a lot. I just wish the drums were louder. And I wish they had more space. 8 decibels louder or more. Yeah. I feel like everything needs a bit more space with some EQing too. Kind of really let it shine in its full glory. Some EQ cleanup of all the elements and then give the drums some more room. Maybe side-change a little bit more with the drums. That would be smashing. That is already really cool. Awesome. Thank you, Quantizer. This is really... I like these tracks a lot. Alrighty, moving on. The next track is titled Isolation and it's from OV. Let's go. That sounds to me like a collection of interludes from a metal album. Only Plant Piano. Yes. It's not quite jazzy. It's way more metal, I would say. I think it's like metal jazz because there's lots of atonality, lots of chaos and... But also some very... I don't know. It was so packed with music. I would have to go through and stop every 10 seconds to give thoughts on the last 10 seconds if I were to actually talk about this piece in an intelligent way. I'll just suffice to say very metal. Would it be someone to remix this with drums and bass and guitars? So this track was made with Ardor and General Midi Synth. I would say too much reverb. It definitely felt drowned out, the piano. It was hard to hear the top end of it. And I think it's probably the General Midi Synth that's doing the panning because it has that built-in pan with the high keys and the low keys. So I think that's expected. Because a bit much and a bit dark. I think a brighter and quieter reverb would serve it well. Otherwise, I can't give compositional tips on that because... It's both my pay grade. Quite outside of my comfort zone. It's hard. It's very difficult. It's not easy listening. And there's so much dissonance, especially at the start, that it kind of... If I didn't know Ovi and didn't hear tracks that they submitted before and how competent they are, I would think that this is some random stuff that someone put together. But then it doesn't. It's not so random anymore. There's lots of very precise piece parts in there, I think. And the finale with the clean tonal chords is like a complete opposite of the beginning and it beautifully resolves with the harmony and it was a journey. So you could take that exact set of things you just said and apply it to half the progressive metal albums and it would stay true. At first I thought it was total chaos but then I came to realize that they were actually doing something really intelligent. If I didn't know the musicians, I would think they were complete beginners, but knowing that they're a very metal piano piece you've written, Ovi, solid stuff. Yeah, that's really crazy, really avant-garde and really out there. I never heard such a piece on this show and wow, that was interesting. Okay, let's now move to the other side of the music spectrum with Outer Mind and a track titled They Dream. That's a preview. I got a lot of variety of music we're playing in these streams. Straight in the hard style. Hard style kick over Ovi's track. Oh, wait. No, I can't do it. He's out there, not everyone. Just... For clarity, there's some impressive DJs. Wow, look at the macro dynamics in this track. We've gone from Ooh, that's a cool lead. That's a pianissimo now. This breakdown is really deep. I love it. Imagine this on a festival where, like, I have a decimation in there with spicy digital distortion. Oh, that's a high resonance. Oh man, this is like... Gives me goosebumps. No more dynamics though. There's actually quite a complex chord progression and a really dramatic melody and, like, wow. Gave me Pirates of the Caribbean vibes at the end. Really strong ones. I think I can't hear you, John, and I don't think it's my doing. Right, I hit the mute thing because I was slapping it on my 15. How could I forget? I was going to say everything's very good. I also agree with you. Very Pirates of the Caribbean. And it's that triplet feel. The hardstyle triplets perfectly match with that. But we also got chords and a melody that reminded me of that movement from Pirates of the Caribbean team. Hardstyle's pirate music. We've confirmed it. But sea shanties of the modern era. Yeah. I was saying the kick and sub-bass could use more punchiness. I feel like they're not present enough. I don't like the sub-bass. I crank it on my 15 and I don't feel it in my soul. And I should definitely feel it in my soul. So... That's my only advice. I felt the leads and the chords in my soul. Yes. Everything else is fantastic. I would totally love more transient of the kick and more like a punchy body that just, you know, because the kick is sort of distorted and I love the distorted taste of that but I love to add a little punchy on the start of it to just reinforce it so that your subs really go... Yeah. So it's not just... but it's... Yeah, exactly. And dynamics really help it hit on big systems. It's a bit counter-intuitive but the more dynamics you have I think I've mentioned this a couple of streams to an extent. I mean, if you have like minus 30 loops or something that'd be crazy. But if you have actual transience to your kick, the big PAs and big amplifiers will eat them right up and smash out your audience straight in the chest with bass. We'll have a good time. And hopefully not deafening them as bad as if you just limit the whole thing. Yeah. Yeah, because then your sound engineer is going to be turning it up to get more transient and then the average loudness is higher and then... Or they'll turn it down to not burn out the amplifiers or whatever. That too. If they're smart, we... Not blow the tweeters and stuff. So... So that was Outer Mind's Daydream. The track was made with LMMS, synths where synth 1, that's not open source sadly, zinnsubfx source, surge, triple oscillator and samples same as usual. Music creator, producer, spot, hex, a wave 200 drums and shins back blah blah blah Selfmade kicks. Selfmade kicks are the most important ones. Selfmade kicks are the best kicks. Shoutouts to entrepreneurial kicks. Support your local resort kicks. Oh man. Alright. Let's move right on. Malfuse I don't know how to pronounce that. Let's say it Malfuse. Resuscitatio Resuscitatio Resuscitatio I don't know if I'm pronouncing this totally butchering it or is it the correct way. Let's hear it. I can't find any metadata for this track. Where did it come from? Like seriously. I can't find the author or nothing. Who submitted this? Raise your hand. Because I don't know what is it and I don't know if it even belongs here. Nobody? No one's saying anything in chat. I think someone mentioned it on Discord before the stream. Who was that? I'm looking at Discord now. And also how did it get into my files if I can't find any or unless someone like Okay wait I have it. Okay sorry. I got it. I'm just blind. I don't hear any. Interesting it's classical music with metal drums. Like someone muted the track on a bus. Sadly not much dynamics in this track. Because it was turned down by 10 decibels. That's the most. Even an Outer Minds track was turned down only by 9 decibels. Cheechoo says it's War Hero Metal. I kind of agree with that. It was a really interesting piece. It makes me think of Oh what are they called? There's this band. Every single member looks like a vampire from a different vampire movie. Um... So the problem is the title that this track was submitted into the form was Canon. And the metadata had a different title. So Malfiz please don't do that. Because otherwise I will pause your track and abort! Abort! Abort! Nightwish is the band I was thinking of. Very good. But if you look up a picture of the band, everyone looks like they're from a different vampire movie. Which is pretty cool. It fits the style perfectly. Honestly, if vampires made music it would sound like Nightwish. Maybe they do. Yeah. This track was made with Ardor, Drum Gizmo and Ray Session. Interesting. I wonder what Ray Session was used for. Because Drum Gizmo is loaded as a plugin. So I guess maybe there was lots of orchestral stuff. So I don't know what that was done with. Not Drum Gizmo. Yeah. Anyway, that's a new one. Welcome Malfiz. Just please get your metadata straight. Alright. That was interesting. I I wish there was a bass guitar though. To fill in... With the kick drum. To play with the kick drum. To fill in the low end. Low-fi is saying some distorted guitars would have been nice. And if low-fi says it, it's a fact. So, now you know Myrox, whatever their name was, need distorted guitars. I'm just kidding, it actually sounds really cool. But I would like the distorted guitars as a listener. And a little bit more dynamics. The transients were pretty clipped on the drums and they didn't have to be. I think you could have had a nice big full kit and it would have sounded fitting. Because the orchestral genre calls for dynamics. You know? Unless you play forte all the time. Yeah. I mean you can, but... Yeah. You can. I don't even know what I would try to say there. Okay. Moving on. The next track is from Jobin Resi. I hope I'm pronouncing this correctly. And the track is titled Together. Let's hear it. Lovely pans. The vocals also fit very well. Yes. They write these are purchased vocal samples. Either way, they fit perfectly. Grabbing good samples is not enough to make good music. No, I agree. I've heard it plenty of times but I did not expect this development. I did not expect a non-4 on the floor. This is... You can garage beat, dude. That's the genre melting. So cool. Sahativa writes fake trance. Jobin Resi writes it was made with LMS on Ubuntu Mate 2020.04 Zenatsub FX MDA piano Culp plugins such as Sidechain Compressor and purchased vocal samples. That was excellent. I loved that. Yeah, I like that bass line. It makes me think... It's like the way Viva La Vida, that Coldplay song kind of really catches you with the... it first is on beat and then it moves off beat and then it comes back on beat for the last hit. And that bass line sounds really cool with the... it's a great contrast. And then the drums were really nice. The drums and bass interacted in a very good way. Excuse me. I hope the reverb worked. Yeah. I think the mix was a little busy in the low end. I forgot to listen on my big system. What was I thinking? The bass was really... I really like the bass was really deep and nice, but I felt like fighting for space a little bit in the sub frequencies spectrum. Maybe some other synths could be cleaned up a little bit. I don't know. I haven't seen the mix, but I just get the feeling that there's a little bit of clutter there. And maybe maybe it's like some reverb on bass that's making this sub... Yeah, that could have been. Spectrum messy. I don't know. A little bit of that. It wasn't much. I think it could be a little bit cleaner and more punchy in the low end. But overall, really cool. I loved the two-step beat with the trans theme. That was really surprising and really cool and refreshing. And this track is all purple. Up something happened to the audio. You are slightly more silent or muffled. Oh. I turn myself up after I blow my nose. Ah, makes sense. Sorry. Alrighty. The next track is titled Ibu Profan by G Newton. Be careful. Too much exposure to this track can wear down your stomach lining. Don't overdose it. Yeah. Lots of people die because of that. Actually, I turned aspirin damages your hearing. I like these synthesized drums. Almost unfollowably crazy. I wish there was some more sighting on the bass. So the drums would feel more powerful on top. It's off-center. It's pan to the left a little bit. You can see it on the vector scope. Or it could see it. It's weird. I didn't feel it, but it is. Look at the kick. Look at that. It's skewed. That's interesting. Wrong space bar. Alrighty. That was Ibu Profan by G Newton. It was made with LMS, kicker, triple oscillator, and stock plugins in LMS with Carla Patchbay. G on kick and Vitalium. There's the secret sauce, I guess. Calf plugins, Ether opens the operating system with Manjaro. Interesting. Really nice. There is something rough about the mix. The drums I think could use some tasteful saturation. Maybe parallel. I like the punch and the transients on them. But I think they miss a little bit of spiciness. The saturation and parallel could I think help with that. And also some side chin with the bass to also increase the perceived punch of the drums. But overall really interesting stuff. I like that. Although as it is, it punches through the kick really well. I don't even know if it needs more punch. It's super dynamic. It's using the entire spectrum look. It was turned down by 0.5 decibel. It was turned down by 10 or 9 or 4. So it's dynamic and that's really good. But it could do some more stuff I think with the mixing or sound design a little bit. But it's a really nice thing. It's a really nice start I think. Alrighty, let's move on to another track which is titled Mind Palace by Geeky Gami. Let's go. Microtonal. I can't tell if it's microtonal or not. Oh sorry. I focus on the lower arp. Same feeling. And I think the microscope shows that there is a slight panning. It's not perfectly balanced. Yeah, interesting. The mix felt quite busy and I'm not sure if it's intentional but I felt like in the mid-range lots of things were happening and it was a bit noisy. Maybe that was the goal. You probably could EQ it and clean it up a bit but that's easier said than done when it's that busy. It's very weird. I can't tell if it's detuned or it's microtonal. Yeah, I can't tell either. I'm not the one to ask. Yeah. I got some friends who could tell us but not me. I'm not into microtonal music. Yeah. Yeah. I think it's a cool idea. I've heard some microtonal stuff that I have liked so I could get into it but it's harder to find good stuff. So it's, yeah. One thing I wanted to try is use quarter tones in melodies. Because sometimes I found that when I'm humming melodies, it was years ago and I was humming melodies so I couldn't play them on a keyboard and I figured out I was missing a key between two keys. So I guess a quarter tone in the 12th tone equal temperament could be something interesting to play with but doing a completely different tuning system is not something I would like to test because I don't think I would be able to come up with something interesting. Yeah, I feel like it's a years of experience kind of thing before you can start getting good results but I wouldn't know because I haven't really tried. Well, I've done some microtonal sequencing in VCV which makes it incredibly easy because you can send arbitrary voltages so you can send arbitrary pitches but it's still you know, it's hard. It's hard to write good stuff. Yeah. I wonder how close to a scale I came now that I think about it because I never checked if I was just playing notes that are real notes just slightly detuned or if I wound up in a microtonal thing but whatever, that's a way off topic. Gigi Gami writes that this was made with LMMS, ZenatsubFX Loudmax, I don't know what that is, and stock effect plugins. I know the ZenatsubFX supports microtonal tunings. It did that for a long time. I think it was like the first open source plugin that supported microtonal tunings so maybe it is microtonal I don't know. It did sound partially like it's microtonal. Yeah, either way, if anything, it sounds like major but using a very sand progression. Oh wait, we have some notes from them. Perfect. Good old notes. It is a track made in 15 equal distance O, EDO, microtonal. It is meant to represent what the title says, your mind palace. The palace you go to in your own mind. I tried doing some fancy key modulations if you need to contact me and let me know on Discord. They're responsive by emails. I would say the fact that we struggled to tell if it was microtonal is a good showing that they did a good job. I'm kind of glad I missed this piece. I didn't read that before. Yeah. Because we had some time to guess. All right. So that was Mind Palace by Geeky Gami. Two musicians going, huh, something's wrong here. This isn't a scale. Is this just whack or is this microtonal? Is this just bad music or is this jazz? I can't tell. It's a tough question every musician must ask himself sometimes. If it's unlistenable, you just tag it as experimental and everything's fine. You're allowed to move on. Let's listen now to 775 Power by Farleen Nex. Very strange name. I don't know how to pronounce it. We're getting some classic trance here. My lo-fi writes still waiting for the 0VM track. Yes. It was part one. That was the never-dying hi-hat sample from the Roland wheat drum machine. This was made with LMMS, Zenatsub FX, Audacity and Manjaro XFCE. Really nice. I'm an XFCE fan myself. Very nice. I don't have many comments. Bass is good. I like the 303 tone. Those leads are very classic. I really like them. Very good. They also write that this was run on an ASUS P5L-VM 1394 motherboard.  Woo-woo! You can also see the motherboard in the artwork image. That's very important. We need to see the artwork image. The artwork image is right behind you. If you move away, John, we can see it. I mean, it's there. It's hidden. It's there. That's the... It's been hiding behind me the whole time. They wrote how to pronounce their name. Furlin-X? Something like that? Furlin-X. I think it's Furlin-X. It's a combination of furry, lynx, and fennec fox, apparently. Lots of lore, I guess. It's easy to say. Furlin-X works. Oh, so 775. What is the 775? What is that number? It's a socket. It's got to be the socket. It's LGO 775. Oh, yeah. Definitely. Good meme. I don't know what to say. Thank you. That was cool. That was excellent. I'm looking forward to more classic upbeat trends like that from Furlin-X. 775, there they say it. It's a good socket. Oh, man.  Okay. I have a Core 2 quad, actually, in my bedroom. That was the SVS server. That's a 775. It's an old Dell motherboard. It's total garbage. It doesn't let you do anything on it. It says the CPU isn't supported and that it's going to have power issues and that it runs full power all the time. No complaints. Okay. The good old days of technology. The next track we have is called Moon Lazy by Checho. Yeah, where is Theo? This was made with Ardor 7.1, Surge XT, Calf Vintage Delay and Ace Compressor. They also write music is the key. Winky face. Actually not winky face, just smiley face. I like the kick here. Very distinct. Yeah, I like that pause in the bass with it. Paddish arp going on in the background, very nice. Those slap so hard on the sub for some reason. The transients to these are just so loud. It's so funny. Come on the 15 and man. I guess that's the transient, you know. Yep. This kick has an enormous transient. I love that. That's why I was saying big systems love the huge transients. They're big fans of them. Yeah, and they can play that loud, cleanly. There's a difference between peak output and RMS output. They say sub bass is especially for me. Did a great job. I'm gonna listen to it more. Whoa. That bass goes low. I like the acoustic snare in the background. That's like 40 hertz.  That's pretty deep. Okay, that was Moon Lazy by Chechu. D is pretty much the lowest note, like D0 maybe it's D1. 36 hertz is pretty much as low as most systems will go. The sub I have is utter nonsense goes down to 16, but that's basically worthless in a real recording. The only upside to it is I can hear that my track is rumbling for no reason. But yeah, that's pretty deep. I think that's the open string on a bass guitar. Pretty sure that's the same note. I think it's an octave lower because I don't think bass guitars go to 40 hertz. Unless you're using 6 string bass guitars. Yeah, he says it was E so it was 40 hertz. Oh man. This is my talent. I can identify bass frequencies. I'm very good at picking out bass frequencies. Yeah. Weird flex, but okay. Hey baby, what's your bass note? Let me guess. It's E flat. I used to be big into car culture so I'd be at car meets and stuff and someone would come thumping in some music and I'd be like, oh what you got in there, two 10s? And they'd be like, yeah, actually. Nice. This is my gift. No. Sorry. Whoa, okay. Let's move on. The next track is called King Don, King Don, King Don X by Savannah Trinigowski and I think this is going to be the longest track by him yet because it's almost a minute. And they usually submit like a 15 minute snippet. 15 seconds snippet. It was made with Ardor 6.8 and GM synth. So I guess general meaty short and sweet. We've heard this track before. It's another iteration where like hearing the process month over month. Month after month. I could never forget those horns. I love these like crooning vocals. Really cool. At first I thought you were saying something. No. It wasn't me. It wasn't the track. They leave no comments. So let's move on to the last track of this evening or night or the morning depending on where you are. I cry tears every time. It's titled Convalescence Part 3 by Joachim Hilesstad Hilesstad and it's 12 and a half minutes long. So I'm going to play part of it. And then we're going to fade it out and say goodbye. So this track was made with Ardor using LSP Cardinal and Surge XT effects. The author also writes this is my very first production using only fast software on Linux. The guitar is played by me with an E-bow and a volume pedal and to a 30 second delay with the negative two decibel feedback to overdub myself. E-bows are cool. I don't know if you're familiar but they're a magnet that vibrates the string when you hold it over it. So it's like a brick and you hold it to the string in it. Oh. So this is not a synth. This is a guitar. I'm 90% sure this is the guitar. The resulting audio feeds the guitar feeds in the guitar Wait, what the hell? Okay. The resulting audio from the feedback delay line feeds into a custom shimmer reverb I stitched together in Cardinal using valley plateau and audible instruments texture synthesizer set up as a pitch shifter in a feedback loop. That's a good patch. I've made that too. I forgot who suggested it in chat a while ago but I've been stealing that idea all the time. It works great. Convalescence Part 1 and 2 were made with Properl Heads Reason in 2021. Awesome. Welcome to the open source side of music production. I hope you're enjoying it. Oh, is this Pyrox? Yeah. Ah, cool, cool. Good stuff, man. Yeah, that was the last minute submission or the last half an hour submission. Yeah, I think I listened to part 2 of this on my own, if I remember. I know I listened to one of yours, Pyrox. You may remember which one. Yeah, I like this stuff. You do very good ambient. But you play the right notes, I guess. Now we have a harmony. What amazes me is that this could be performed live just with a guitar and a laptop doing all the processing. Yeah, you should get someone drums and do a crazy concert. Oh, dude. Here break beats playing in my mind. I get the same thing every time I listen to ambient. I'm just going like and then I'm like, okay, I'm going to make some drum and bass with this pad. That's how my track Singularity came around. I was trying to make a remix of an ambient track by Luigi Verona and... I didn't know the tempo and I kept drifting away. So I decided to mute the original track and just do my own thing. This is very pleasant. We've been listening to three and a half minutes almost four already. This could literally just be in the background of us having a conversation generally about music. The shimmer patch that he's talking about if you guys have never done it basically just open cardinal and get a valley's reverb real mixer before the reverb and then so you take dry signal in stereo mixer to the reverb reverb out into clouds whatever it is the mutable instruments I can't remember what texture synthesizer and you take the pitch knob and you set it to one so it'll pitch up an octave and you take that and go back out into the reverb and that gives you the shimmer effect It's very good. I use it a lot now in pads and stuff. So how do you decide to end a song because you're just sitting there and you're like wow this is beautiful I'm playing the greatest guitar in the history of guitar and then it's been like 10 minutes and you just go oh that's probably long enough No I mean he was like 20 minutes in and then he thought okay I think that's enough and then he went and said okay maybe I'm gonna do fade out from 10 minutes to 15 minutes so no one noticed that it's over because that's how it looks like it's like yeah you could play some I don't know role-playing game with pen and paper that'd be a good use to this sing sort of way you know in a role-playing sense it kind of feels like exploring a cave but not a dangerous cave maybe an ice cavern you're exploring an ice cavern or maybe maybe a valley where there's lots of alien fauna sorry flora like very pink and purple looking fauna all over the flora yeah flora you're right yeah lots of weird alien plants and you're just exploring that let's see if I can transition to the end screen without playing background music over this oh I think I can or maybe I can yeah this also he says cosmic space this reminds me a lot of the X soundtracks like X3 and X4 if you've ever played those I hardly listen to their music so I completely forgot about it because I just play side trance in the back of any space game I play in my mind space sounds like side trance so I always just cut off whatever soundtrack there's like albums like progressive side trance pics they got like 50 volumes throw one of those on and then we're in space but no this is what the regular soundtrack to those space games sounds like this could or like space engine with music like this probably elite dangerous as well so there's some combat so I mean there's combat music and there's like just trucking for space music the combat music would be exactly this but with like tribal drums going like just to contrast the high tech sci-fi themes all around visually lasers and stuff okay let's try this let's try the transition it may be jarring that was the perfect musical time to and I think we're still yeah we're still in the in the theme in the mood in the tune yeah if you take off your space helmet this is what you hear just before you die yeah exactly this is this is the sound such a soothing ambience it's kind of like tinnitus but a lot better I guess this could also work as a meditation music yeah that's what people were saying too this is very good it's kind of new agey it's almost like ten different genres all combined into one beautiful guitar tone so is this the greatest guitar tone? we have to take a vote how did you keep the timing like because this seems like maybe it was played to a metronome or was it just because I don't feel that the demo is drifting and I think I would totally drift as I was not playing to a beat or even if I was playing to a beat I would drift probably if not for a metronome interesting yeah so that's all thank you thanks to everyone for joining us on this stream thank you to everyone who has attended the part 1 where we were remixing my lo-fi's track made in zero of them thanks to everyone who submitted their music hmmm we're bringing submissions from two months this time because last month was last month was wrong thing there you go because last month we had Paul Davis on and we had no music submissions let us know what do you think about this idea of splitting the live stream into two parts so the music submissions are a separate thing I think it's we'll see how it works out also huge thanks to everyone who is supporting my work financially these are awesome people on Patreon and LibraPay and if anybody watching would like to help me keep going making live streams and videos about open source music production on Linux ads and stuff then you can go to patreon.com or LibraPay.com and go there and do something normally I have links but I just we're doing this music outro thing so I don't have them I could copy them oh that's the thing there you go and if you'd like to meet the community making music with open source software on Linux you can go to chat that chat .unfile.xyz and there is also a link to discord in there if you prefer that yeah thanks to everyone and we'll see you next month hopefully there's gonna be something else as well before that


and microgravity science mission. I'm back in the space lab module at the moment. And behind me, you can see some of the crew members working on the experiments that we will be conducting today and over the next several days before we return July 7. These are microgravity experiments. Can you explain what that means to all of us? It's pretty much 50-50, what we call life science and microgravity science is the other half. The life science is a study on the effects of the human body being exposed to this environment. And behind me, you can see Dr. Bob Fursk is on one of the experiments, which is what we're wrestling machine. He is testing his muscle strength and helping him is Dr. Rick Lenahan. And we also are conducting simultaneously furnace operations and bubble drop operations to see how materials operate in microgravity. So it's both the material science and what we call human study science.  Tell us a little bit about that. Well, I think I heard the machinery question. We did extend the mission, and it's primarily so that we can expose the human subjects to a longer period on orbit. And we'll also be able to conduct a little bit more of the microgravity material science. Go ahead. We like numbers in sequence, so we're just confirming that you meant to tell us flight model three for step two. That's a firm decision. That's louder than we are, thanks. Would you like us to make the vast changes or is that? We'll make the change from the ground, starting about a little bit before 2145 when we have to record on there. We're going to record some BDPU video. Now our perspective has changed, and we're viewing looking aft along the payload bay of the Shuttle Columbia. We see the vertical tail fin, orbital maneuvering system pod. And at the right part of our screen, we can see one of the payload bay doors. In the center of our view, we can see the Spacelab module. This is Mission Control Houston. This view inside the Spacelab science module. And Pedro, the screen now shows top Q to abort, so your data dump should be complete. Copy that. Great, thank you. Again, this view from the Spacelab science module showing payload commander Susan Helms currently in the process of setting up payload specialist Jean-Jacques Favier for some data takes with a leg muscle experiment, one of the life sciences experiments in the Spacelab module. Helms and Favier, along with Chuck Brady and Bob Thursk, have been conducting this experiment periodically throughout the course of this mission to test leg muscle and muscle mass ability to withstand long periods of exposure to the microgravity environment.


this and I'll get this really good so all of our experiences together are nice and calm. Even now I might lead ahead a little and let my arms down but did you notice how I settled in and I really exaggerated that to you. So that's looking pretty nice. Pretty nice. All right at this point maybe I'll back up a step or two. Bring that forehand through and off we go.  We'll go past the hindquarters. Bring them around to us and leave the block. Leave that mounting block. So I'm patterning a really great thing which is I come up on the block you get to take a break and then I step off that block and we leave it. There we go. He's looking pretty good here. We'll move to the bridle. I'm still watching him. I'm still able to stop at any time. If I can stop him. If I can stop him. Then I'm able to gain a little space and now we could continue on and lead. I don't mind a little space. He doesn't mind that either. If I turn good we halt. It's looking nice. I see how he's getting coiled and ready to move that hindquarters. Good. Sort of bringing myself back towards the center and maybe even as a bonus near that near that mounting block. That's pretty handy. I'm gonna take our time here. He there. He could get a little softer. He's kind of holding his neck tense. He's a little rigid. Good. Wouldn't mind him just sort of relaxing in here a little bit. So many so many times I'll tell people you might have a goal. You might come to the barn and we all have goals and your goal might be today you want to jump the ditch but you go get your horse. Your horse is more tense for whatever reason but your horse is more tense that day and maybe it takes you longer to get that horse saddled that day. Well for me all plans are subject to change so if I need to I'll work on this and I'll get this really good so all of our experiences together are nice and calm. Maybe I don't get to the ditch that day but at least I had a good saddling session, mounting session and could we get these horses to where he's calmer when I'm with him and this ring right now than if he were on his own and I walked out. It seems like a little thing but for some people their horse is actually a way more tense when they're around. Alright so I'm gonna go I'm gonna reach under and bridle him with my arm under so you know there's sort of two approaches to this and I'll work on both so I might go arm under notice I tipped his nose to the side and and then I'll bring that outside ear first and then the inside ear in second.  When I take the bridle off or put the bridle on I want those reins right up by his ears right up behind his jowl. Let's let's take this bridle off and show you this so I'll still tip his nose to the side when I drop or sort of bring the bit out gently.  Alright well here's if I take my hand up and I just put a gentle pressure down now don't force it and the other thing is I'll think of sort of slightly bending and almost like I swing the head down if you're if you're pushing hard you're not that isn't not the idea you're not at doing it at the right time so he's got to be relaxed but if I just gently sort of bring my hands left to right with just a little downward pressure I mean it's very subtle there's many ways to get his head down but that's a great way to do it so now his head's down here now I could take my right hand and be up between the ears so I could take my right hand I could be up here and I could grab the crown piece and he could take the bit from this position he could have dropped his head lower but actually this isn't bad at all now that's probably not what he did on the track I'm guessing on the track they reached under his head and lifted up so that's your other method try to get that forelock out of there we could I could just remind him hey do you get your head down there alright see I took time on it that's really important make our adjustment so that's looking pretty nice as I tighten up that girth I'm able to tip tip his nose to me and I ride with I ride with multiple use this headstall on multiple horses here at the barn so it's making them smile a little bit let's drop it down here now on a gelding you want to watch the canine it doesn't hit the canine it if you put your finger behind the mouthpiece that's the true gauge of how much it's pulling on the lip also if you notice the cheek pieces they should sort of come off the side and sort of snap come back without snapping quickly so some people leave a bit a little looser on a mare you can get by with that on a gelding you're going to bring it up a little bit I'm content with where where this bit is at on him all right in the event that you might want to lunge or do a little round penning with your horse you can twist the reins up so there it's like this and then you can run throw it latch through go up some people have never learned that it's just something you can do and then the reins aren't a good and aren't a good place well he was a little balled up with the he was a little balled up with the girth so we might work on that just a little bit here I recommend that a horse that you're not you know as sure with like this like a horse like this that you would walk trot canner both directions on the ground before you get on the canter is a gate that's playful and the canter is a gate that horses are energetic their life comes way up their emotional thermometer is much higher than say standing in the barn or walking so the canter is a gate that you might want to check out before you get on your horse it's more it gives you a pretty nice read to your horse's emotional levels notice I send him off sort of think about leading get a little drive in there see how little I can do I really am thinking canter but I'm thinking about bringing his life up a little at a time you might see his eyes and his ears open a little bit to redirect here his eyes his eyes opened up a lot there it's gone past a little more little more energy I'd like him to find the canner I realized the stirrup slipping down he felt it didn't he he felt that good I'll take that wasn't a long time at the canner but it was fine there's the idea okay on me looks like a little colt he raced until he was eight from what I'm told that's a long time for for at least a horse like this and you know it's amazing to me that he still feels the girth and and they sensitive to that still bring his life up a little bit more see if I can just send him off with a little more life at the canner like it there might get a little length good I'll take that and then I'll step out of the center if I turn towards them and get tall it makes sense to halt it's kind of like a traffic guard saying stop wait it's the same thing come with me wait good very good and you can see he's bringing his life down so as much as we would bring the horse's life up it's really important that we can also bring their life down so here I'll bring his life up a little more see if we can get him to think about sending off see how little I can do when I help him get the answer good good he's thinking about me let's get one more canner in here good as I'm content with the canner I'd come back to the center and I'm trying to show him that I like his canter so much that I'll step out of the center and you can come to me he's understanding that quite well now