 So, my name's Colin Murphy, I work at Adobe, that's what I looked like before COVID. This is a customer story and it's a little different because I've given this sort of talk to a lot of people at Adobe and I have to kind of talk for 20 minutes about what WebAssembly is and so kind of trying to invert it, I've also like been aggressively pruning as the day goes and people cover things that I would have covered. I also want to set your expectations low and I don't want to do too good of a job because Ranu, he gets really stressed out, so don't want to set you guys up for failure. All right, so this is the biggest hurdle is just like, well, what's WebAssembly, right? You kind of get, Adobe, I don't know, I'm assuming you've all heard of it, it's a pretty big company, it's not like Microsoft or something, but there's a lot to it and it's hard to kind of commit people with what application should look like, how we're going to compose applications because where they're coming from, if they're front end, then they're thinking, oh, I know WebAssembly and they don't, not in the context of Wazi and all that. They're back end and they're like, well, I know Docker and I don't want to, don't bother me, right? I just want to write my Java script, my Java, my Spring Boot apps, so it's kind of like Docker and it's like it's not really like Docker and then Edge Compute's still really early on and so, but I think that's kind of the whole point is that you have to kind of consider it as a way of composing an application, really, from beginning to end. So, yeah, so let's keep going. So WebAssembly is already used quite a bit at Adobe and if any of the higher ups at Adobe ever learn about this thing called CNCF and that there's this KubeCon thing, I'm not really going to kind of cover my tail here and I'm not going to go into how we use WebAssembly too much. So sorry if that's what you're here for. And that's also because I'm not a C++ engineer. I only recently became a front-end engineer. I actually was responsible for document clouds, infrastructure and developer experience for the microservices. So Adobe Sign, Acrobat, kind of how Kubernetes was laid out, how people did CI, CD, what their Spring Boot apps looked like, all that kind of, there was a lot to it. And I recently switched over to Creative Cloud Web, kind of a career limiting move perhaps, but I'm now just like a sub-average JavaScript developer. And sorry, so there is a lot going on C++. There's, we've worked with the Chrome team. I'm using We Loosely there. There's actually some really great write-ups about this kind of stuff. So there were dynamic threads, dynamic threads of P threads, SIMD instructions, performance optimized storage from origin private file system. There was a lot of work done in order to get Photoshop working in the browser. So I don't know if you're all aware, but there's Photoshop in the browser now. Acrobat has, if you use the web version of Acrobat, then you'll see there's, well, there's a lot of web assembly there as well. But really the whole purpose of web assembly in the front end for Adobe is we have a lot of C++ code. We've had a lot of C++ code for decades. And we want to use that in the browser, right? We want to have good browser experiences. But that's not really applicable because none of that stuff's going to work, right, in Waze, none of that stuff's going to work without that JavaScript calling the making the system calls. But kind of the nice thing is at Adobe, we have a really positive appreciation for web assembly. If you say web assembly, that gives really high, high, high marks. People like the term, rates highly. For server side, everything's on Kubernetes, for better or worse, and there's not a lot of kind of these big epic engineering challenges, at least that were enough to keep me interested. And so, so now I'm a JavaScript developer. So, yeah, so the story kind of where the story begins is Adobe Sign. About a year ago I started really working in earnest on how we were going to do microservices in FedRAM. And that would probably be a great KubeCon talk all in and of itself. But right before we started our real auditing of our application, the FedRAMP standard changed. And now any CVE at all, of any rating, had to be reported to our sponsor. And so I don't know if you, I don't know if anybody here's run Kubernetes, but you end up using a lot of third party images. And if you're fairly sophisticated, you have lots of controllers, and you think you've done a great job, covered all your bases, and you end up with thousands of CVEs. And you'll have one libc vulnerability from 2013 that nobody thinks is important. That'll get flagged in Ubuntu, Red Hat, and maybe Alpine. So they've got, that's three CVEs right there that no one has ever, any intention of ever fixing. So you're going, it's going to be difficult for you to get through a FedRAMP audit if you use lots of Docker images. You actually have three options. One, you can start paying people money. So if you use Istio, you can start paying SoloIO, a bunch of money. Or maybe not too much, but it can get pricey. And you can fork all of these third party projects, which is a lot of fun. Or you can just cut them out altogether, and that's really what we were faced with. And it was, it was painful, and it's kind of still painful. So anyway, we're kind of reaching the end of our challenges. This CVE thing is terrible. And so I'm just kind of looking around and seeing what's the, what's the successor to Docker? What's the successor to Kubernetes? And so I kind of, I started, I got into WebAssembly. Started looking at WebAssembly and I set out to say, well, could I take a microservice that's actually used in production, a simple one, and could I make it into WebAssembly? And could I deploy it on the client, on the edge, on the server? And, and I just kind of, on this slide I added this like arrow. It's like, you know, at this point, everything's moving this way. I'm sure some data will move back, or maybe it'll converge in the middle. But we're trying to get a lot of functionality for that data locality. Bailey said it better, whatever. It's good to have stuff here. So, and, and, you know, this is kind of the problem we've had. I think we've said it before. I was talking about Heroku earlier, right? Is Java, JavaScript, Unix Wars, right? G-Lib C, right? We want stuff that can be, can be used in lots of different places. And that's, that's like, well, this is kind of the ideal, right? I, software developers, they write, they understand the business logic and then they don't have to worry about how it gets deployed or, or, or what, what it, all the, all the things they don't have to care about, right? That's kind of what we've been doing here for platforms for a while. Yeah, so, so this is kind of like, so I'll get there. I'm gonna demo that. But, so what, this is kind of my initial impression. Like, okay, WebAssembly. So, I don't have to have the, I don't have to have the operating system that's in Docker, right? I can have it be really fast. It's gonna be much better than, I mean, I'm comparing it to the JVM. I'm comparing it to Spring Boot. So it's, it's a low bar, right? In terms of startup time, say, or memory footprint. And also, compliance is really big. We're, everything's, you know, we had a lot of HIPAA, FedRAMP, Zaktu, PCI. So these were kind of like, okay, this is gonna be great. I'm gonna, I'm gonna do this. And maybe we can just run it, you know. Like, maybe we can start moving people over. And, oh yeah, and of course, right, is the spend. So, so we, once again, you know, somebody at Adobe might find out about this conference. And I'm actually kind of like, you know, you're like, it's kind of tongue in cheek because we, we do get a lot, I do get that question fairly often. What is CNCF, you know? So, but it's a lot and I can't say how much it is, but it's a lot. Okay, so, this is what I did. I, we have this really simple Java Spring Boot app that you give it an image, and it removes the background. Not too hard, I'm sure you guys can figure out how it's kind of done, but very trivial. And then, and I just wanted to see if I could, if I could run it. I did, I did Fastly, Cloudflare, Browser and server side. So, time for demo. So, so actually at first, I'm just going to play a video because then, because it's actually going to run, it's actually going to run inside. I'm going to, as I move it over, there we go. Didn't want, and okay. So, what was that? That was awful. Click, click. Okay, all right, so, so here we go. So, this is actually going to run inside, inside Kubernetes, which is pretty cool. So, this runs inside our actual, like Adobe Kubernetes. So, I've, I've written, I've written out this business logic and I'm just going to import it into. Wasm Cloud, I picked Wasm Cloud. This was a year ago. It's been good. So, yeah, not pretty much, I'm just calling it and then I'm returning some HTML. There's nothing, it's kind of like, how, how easy it is. It actually was, so overall, really easy. And then I did Cloudflare and Fastly. They were also fairly easy just to import my Rust, have it compiled to a Wasm. So Fastly, of course, actually is Wasm time, Cloudflare's V8. Didn't really make much of a difference. And it's kind of artifact-y, all right. So, let's see. See if I actually start doing it now. Okay, good. All right, so we had to pick a signature. This is kind of a tradition, since we, or since this app was originally written that we pick a signature of sufficient complexity for the contour tracing. And so this one is actually running, this is actually running live in a Kubernetes cluster used by Adobe. So that actually takes a lot of work and I'll show Taylor's network diagram at some point, how that works. So yeah, and then now going on to Cloudflare. I believe, I go on to Cloudflare, pretty quickly. I'm not gonna mess with it. And then, yeah. All right, that's Cloudflare. So this is Cloudflare, it's actually running. I probably shouldn't have done this, but this is actually running on Cloudflare, same thing. Pick the image, load it up, and it's gonna remove the background. It's kind of slow, isn't like one and a half, okay. So yeah, so really not hard. Pretty easy, once you get the, once you write your app, you can run it on Wasm Cloud in Kubernetes. You can run it on Cloudflare. And then actually that's the end, and then I, so what actually what happened was this got put into the product. And so the next thing is showing the beta version of the product, I can't show. So I'll just, I feel it's not very impressive. It was impressive to some people, let's just say. And so, let's see, I'm gonna bring up my, it might be small, sorry. Local host 8000, local host 8000. So it's gonna, I'm gonna drop it in. I'm gonna drop the image in, see if I can drag and drop. And it's not gonna let me do it. Okay, I might have to not do this. I don't understand Mac, OSX is kinda, or whatever. Mac OS is kinda killing me here. Can't drag a, drag a something into it. Well, good thing this isn't a Mac demo, cuz it's failing. Oh, crying out loud. Really? Come on, drag and drop. Drag and drop. Okay, okay. If you drag and drop, you get the same response. So it works in all three places. Really? Like I guess I need to bring a mouse next time. Thanks, trackpad. Okay, I don't know. I don't know what to tell you. If you could drag and drop in a UI, then I could show you that I can drag and drop this file. Okay, thanks. Okay, well you can't, you can't, cuz Mac can't handle this. This is good, thanks. Thanks, Steve. All right, so, anyway, yeah, if I could drag and drop, it would do the same thing. Okay, so, excessive memory, okay. All right, all right, moving on. So that's a demo, and that was actually pretty cool. And of course, I showed this to people, and they were like, we can just run in the browser, great. And that's what most people took out of that. But, and it actually is going to be put into the product. To replace something, you'll never notice. So now that will be done in the browser. Next demo, next demo. I was afraid this is gonna be too short. So that's where we are. Now it's excruciatingly long. All right, so next thing was, Cloudflare has this thing, this kind of, it's Cloudflare. I was really impressed with this. It was hard to type up here. All right, local, okay, yeah. Cloudflare has, Cloudflare has durable objects. And this was a big thing that I was interested in, because I was joining my team, it was about collaborative editing and stuff like that. And so I was like, okay, I'm gonna see what collaborative editing is like. And so what you could do, I thought this was really cool, is you can, they have these things called durable objects, I don't know if y'all know about this, but you just instantiate a JavaScript class in Cloudflare, and it will hold onto the state of an object, really super low latency. And so, if I go over to Safari, which I had up five seconds ago. Then, so right, so if I, yeah. Okay, so here we go, two browsers, and I thought this was cool. So if I open up this, and what's really cool to write from an application perspective is that this is actually happening in Valencia, right? So I do something in one, it affects the other. So it's webhooks, I've got a session with Cloudflare, I've got webhooks sending down so people can co-ed it, right? I thought this was really powerful, and this is really tiny, and this is Rust and WebAssembly. So that was also really cool. And it was before I joined the team, so there's nothing to do with it, what Adobe actually does. I thought that was really cool, and then the last one is, the last one is Kristoff Broving. He was here yesterday, but he's from BMW, and he came up with a WasmCloud, Onyx, and TensorFlow inference. And so that actually is something, when I was going around, I was talking to people, and they're like, well, we have this really heavy compute thing that sounds like it would be good for Wasm. And it's like, well, actually multi-processing, not so great in Wasm, so no. And the other one was, well, we've got all these machine learning models, can we run them on the edge? And it's kind of the answer's no, right? But that's really a compelling, that's probably the most compelling use cases right here, because let's say, actually, if you have Acrobat on your phone, and you open a PDF, it will actually run it through a machine learning inference, and it will reposition the text and images, and it'll all show nicely on your phone. But the problem is that you need to have a nice phone for that to work for you. And if you don't have a nice phone, hopefully, this is okay to mention, sometimes that has to be done somewhere else, so that has to be done on server side. So if you could run it all at the edge in all the major cities around the world, it would be a big, big win, right? And so, so this is, I don't know, BMW must need it for cars or something, but we, you know, Adobe, and probably lots of people like Adobe could really take advantage of this. If that makes any sense. And so, so this particular one is we give it an image and it spits out a content authenticity fingerprint of an image. So it's gonna spin this up, and I'm gonna give it an image and it's gonna give me a fingerprint if everything goes well. Okay. Yeah, that's what's gonna give me hopefully. All right, there it goes. Okay, cool. So there we go. So that's actually running machine inference on my local host, but that's the kind of thing we need is to be able to run Onyx models or TensorFlow models at the edge. Of course, it's not running at the edge, it's running on my laptop, but same idea. So that really, and the problem we're really trying to solve there is that you have an Onyx model or TensorFlow model, it's too big for a good browser experience and there's too much latency if it goes all the way to a server halfway around the world. So that's, so those are the demos. I'll try to get PowerPoint back up here. Let's see. Okay. So yeah, and so that last one I didn't have much to do with that was Christopher Bruving and Steve Schotler from Cosmonic who did most of that, but that was an actual Adobe use case. So yeah, so pretty quickly, and this is something, if you have customers, if you're writing a platform and you have customers, things to make sure they understand, right? So, if they've got stuff working in V8, it's probably not gonna work in Lazy. And then there was all these things like, oh, well, here's an image, here's some machine learning, could you run that? Here's just a simple image manipulation Tesseract library. Nope, right, no, it doesn't work. The other big thing is, there's no doubt that a wazzy-based workload is gonna run much faster than Java, but you know what else runs much faster than Java? Especially in starting up anything else, and yet people use it, right? I mean, people still use Java in Docker containers at a massive scale. So the whole like, well, it's gonna be faster and cheaper and you're gonna save money, doesn't work. It's not a valid argument. So you have to kind of like, next level, right? Like, well, it's gonna let you do things you couldn't do before. Cause you know, the thing is, if you have hundreds or thousands of engineers and they all write Java, that's gonna take a really, it's gonna, you have to save a lot of money to make it worth retraining thousands of people. And so the whole single-threaded wazzy, not great, like not, I know that we kind of got it working in the browser with the dynamic threads, but sooner the better on how to kind of get around that problem. And also the other big thing is that it doesn't, it's a major, major shift in thinking. So, and of course, it has to work in Kubernetes cause that's what people run, right? Until you have something where, where you know, really next level where it's like, well, it's in the data center and it's everywhere, right? It's in your, you know, local cell tower. People are gonna want it to run in Kubernetes. And so this is from Taylor, I don't know if Taylor's still here, thanks Taylor. Thanks for this diagram, Taylor. But it's hard, it's a lot, and but actually what's really cool here in Wasm Cloud, if you notice, is that you can connect to AWS resources. So that's another must have, right? AWS and Azure, Microsoft people, make sure that you know, have some sort of identity system. Okay. But you know, the really compelling things again, isolation of workloads, no host operating system. We're gonna be running, people are gonna be running, you know, we run hundreds of thousands of VMs. It has to run in corporate accounts, right? Corporate data centers, AWS, Azure, has to have some sort of identity tie in. So we actually, for FedRAMP, we had to use, we went with Spiffy for certain identities, that kind of thing. Like people have spent a lot of time and money working on solving problems with this stuff. So it has to still use this stuff. And of course the machine learning, super, super important. Because companies have spent a lot of money on machine learning, I don't know if you noticed, you know, there's a lot of work being done on machine learning and sometimes it pays off. So they wanna keep that stuff. And once again, I know Bailey started us off with, like, people have this misconception about Rust, but he's like, yeah, if you were gonna start Greenfield, you should write in Rust. We obviously, Adobe uses C++ for all of its web assembly, but, and then the other thing is that, for reasons that I don't really quite understand, but I have pretty good ideas about, the large infrastructure as a service providers are a little behind the eight ball on this stuff. I think it's because you have these different silos, going back to the first slide, right? It's a lot of stuff kind of converging in one place. And so if these big, you know what I mean, these big cloud vendors, they've got lots of silos, and it's really, well, is it Lambda at edge, right? Is it Lambda? Is it the IoT people, right? I don't know if those people talk to each other, but so I think there's a real opportunity for a lot of you here to challenge, you know, to really carve an itch here. And you know, take care of that. Take advantage of the portability, make something that's really everywhere at one time. So, time. Am I about done? Five, 15? So yeah, so anyway, just sum it up. Edge workers, I think this is really, the time is now, this stuff's really ready to go. I think you're gonna see a lot of people using this stuff very soon if they already are, but I think you're gonna see at the top of the adoption curve, especially as they kind of turn up the compute, right? Right now it's still pretty compute limited, but once they can make it a little more powerful, then there's gonna be a lot of adoption. I really like Durable Objects. I know it's not gonna work at an open source conference, but I guess the way it would work is, Durable Objects are good, but let's make an open source version of them. How about that? Server-side WebAssembly, I think, so yeah, so it works for the really trivial cases, and it's gonna work really soon for more complex cases, but it's still kind of challenging. I think eventually it's gonna be its own platform, it's people aren't gonna be running in Kubernetes, because as we all know, it doesn't play well with Kubernetes. And this was true a year ago, it's less true now, but we're looking forward to the future of kind of a seamless experience. I think the last talk kind of talked about that, so and it's definitely gonna be a thing. Wasm will be a major player on the server side for what, that's my two cents. All right, so that is all, thank you very much. Any questions? Thank you.