 So, as I was starting to say, no, thank you so much for coming out tonight. I appreciate that. I hope various protests and such are going to get in the way of a great evening like this, and then obviously it's not. So, we're going to be talking about something that's rather interesting, and I say rather interesting because when this was first announced a number of months before the anniversary update came out back in August, and I actually should find out what the exact date was, but I know from the thought of just hearing this, the fact that Microsoft was actually going to be running Linux on Windows. I thought, well that's, wow. I mean, I knew Microsoft was becoming a different company. We're certainly opening up to open source. Microsoft loves Linux these days. Our company is the biggest contributor to open source technology now today. According to GitHub, we are the biggest contributor to open source projects on GitHub right now. Which is, I think, a testimony to our drive to support the open source community. And a big part of that is supporting open source developers. And to do that, we need to be able to make sure you have tooling available to you in the environment that you want to use. And it shouldn't be a matter of, and this is actually one of our stated goals around Windows. We don't want you to go from, just have to use Windows, right? You have to use a Linux box, you have to use a Mac, and you have to use Windows for whatever. We want you to be able to go from having to use Windows to liking Windows to loving Windows to wanting to be, you know, to not be able to live without having Windows on a box. For everything that you do, whatever kind of productivity, whatever kind of development, whatever tools you're using. So that's really the big part of what we're doing with things such as containerization on Windows. We're running actually Windows containers. I don't know why I'm just doing this. Some process on my computer wants me to authenticate. It might be my office stuff here, so. If that comes up again, I'll see if I can maybe shut down the OneDrive. All right. So we, and by the way, that's a little demonstration of Windows Hello, right? Fingerprint logged me on my keyboard here. So this is really crazy that we're doing these technologies in the open source space and supporting open source technologies also in Azure. Azure is, of course, our cloud environment. And right now, a third of the workloads running in Azure are actually Linux workloads. And that number is increasing every week. We're outpacing new workloads running Linux to Windows, about three to one right now. So it's gaining on it. We need to support this because this is where people are at. This is what people are using. This is what developers are building tools for. This is what applications are running on for the sake of business. So we built this subsystem for Linux. And part of my agenda today is going to be showing you what this is all about. How did this get built? What's some of the history behind this? What is the kind of an overview of the architecture of that and how to actually then activate this Windows subsystem for Linux on Windows 10? Then we'll go into a demonstration of what it can do. So it's kind of an introduction to Bash. Let me just ask this before we continue on. How many of you are familiar with Linux? Have worked with the Bash shell or other distribution of Linux? Well over half. Almost everybody. Awesome. So some of this won't be new to you. So I won't spend an awful lot of time on some of the basics. But we're going to show that we can also not only support this Linux environment, but also supporting graphical applications as well. We actually have support for X11 and GDK graphical applications. We'll talk about some of the current features and also some of the limitations. This is a product capability that is currently in beta. So there are things that are going to work and there are things that are not going to work. And we'll talk a little bit about that. And also how you can very importantly help contribute to the community, try things out for us, report back what works, what doesn't, and so on. So we'll talk about that. And we'll talk about what the developer workflow looks like with this. Give you a couple of examples of the sorts of things you can do and some additional tooling that you can take advantage of to work with your local system to work with and troubleshoot or work with web applications to build up with some of the more familiar tools that open-source developers like. And then such as Jekyll and Node.js and C++, Python, Ruby. We have all these available to us in batch. I'll show off some of these in my last demonstration. So this Windows subsystem for Linux has kind of a longer history than you might think. We've actually been supporting a subsystem in Windows since Windows NT days in order to make this happen. There was a subsystem that we built in NT that was the goal with this being to support other operating environments, other applications or other application types that were built for other operating environments such as POSIX, OS2, and of course the Win32 subsystems, which are the ones that you're more familiar with today. But, you know, we could run OS2 apps on Windows. We could run POSIX apps. It required some recompilation, but you could actually make these apps run very simply on Windows. Similarly with the addition a little bit later of the subsystem for Unix-based applications. So SUA was built. It was an implementation of POSIX. We implemented the user mode APIs. We mapped it to NT constructs. But the ability to import Linux or Unix applications to this environment became a selling point for many developers. Of course, not enough to actually have continued further than this because, again, it did require recompilation. So it wasn't just simply a matter of taking binaries and running them under Windows. Along with this, a while later, we have this project that we call the drawbridge project. The idea here is that we have a Pico process and Pico drivers that run that spin up and kind of intercepts and allow us to then plug in intercepting calls. So when an application that's a Linux application, for example, calls to a certain API in the file system, for example, in Windows, this actually maps one to another so it does what is a similar capability in Windows. If that functionality doesn't exist in Windows, then we're building it. So we're making sure that native Linux executables are actually working under Windows, under this Windows subsystem for Linux. So what is it? It is this ability to run native Linux L64 binaries on Windows. No virtual machines were harmed in the making of this subsystem. This is not virtualization. This was actually one of my first thoughts when they announced that they were going to do this. Oh yeah, we're just going to run a Linux virtual machine. We'll make it really easy, kind of like what we did with Windows XP mode on Windows Vista. We had these XP applications running in a virtual machine and kind of made it look like it ran local and so on. No, we're not doing that. We're actually running it on Windows, in Windows, together with Windows, working with the same file system, but also taking and adjusting to the differences between the different file systems because there are, of course, very distinct differences in the file systems. We have an LX Session Manager, which is the User Mode Session Manager for this Bash shell here. The Pico provider drivers are the LXSS and LXCore.Sys, and then we have a Pico process that hosts the shell, the bin slash Bash. And here's what it looks like in a graphical form. So we have the kernel mode, which is the operating environment, the operating system, that calls in kernel mode, that actually then do this mapping so that in the heart of Windows, we actually have this LXCore and LXSS. The Bash executable is running in User Mode. It's working with a Session Manager, and every instance that we start up has its own environment and its own shell. The file system is kind of an interesting animal, as I mentioned. We have two different file systems that we have to support, and so we are going to be, we are supporting this environment with the Linux file system. So those of you who are more familiar with Linux and have maybe worked with Windows, what's one of the things that's really interesting from the command line with regard to Linux versus Windows? Slash, yeah. There's a particular direction that you have to go, and it's consistent in Linux, and not so much in Windows. What else? Case sensitivity? Case sensitivity, yeah. So that's kind of the one that's going at two with these both good answers. If you're working with the piece that is the Linux file system, there's a ball FS, we've got the Drive FS, that is what you're in when you're using, for example, the File Explorer or Windows Explorer under Windows. We're navigating the file system on your C drive and so on. Now I'll show you when we get into the demonstration how we can actually get into, while we're in Bash, we can actually get into the Windows file system. I will carefully show you that we can, from the Windows file system, get into the Bash file system using the Windows Explorer. I say carefully because that's not something that's well exposed right now and there's a good reason for it, which I'll tell you what that is in just a little bit here. But the whole result with this is the fact that we now have this ability to run Linux and Unix tools directly on Windows. So you're running the Bash show, you've got tools that you're familiar with, such as SSH, Greb, Zed, Ock. We can actually support platforms for open source system development, open source projects. We have development tool sets, such as Ruby, Python, Java, Node, C++, certainly. I'll show you a number of these as we get into it here. And again, this is real stuff. This is not virtual machines. It's on Windows, in Windows together. This is a similar slide. Give me a chance to smile at this. We'll do it again. Thank you. I got a couple of teammates that are here today cheering me on. It's nice. All right. So how do we get this installed? It does require Windows 10. It requires that you're running the 64-bit installation of Windows 10. So you have to have a supporting processor of course then to make that happen. It does have to be the anniversary update or newer, and I say or newer because you may be running in the Windows Insider program. Is anybody here a Windows Insider? All right. Awesome. Thank you. Everybody else should be Windows Insiders. Windows Insiders are able to install various rings, either fast or slow ring of releases. And it's cutting edge stuff. It's not a machine, but it gives you early access to the newest stuff that's coming out and coming along down the line. It helps you get feedback to us. It helps you kick the tires. It definitely improves the product. By the time a version of Windows is released, it's not tested by hundreds or thousands of people at Microsoft before it's released in public. It's literally tested by millions of people. So we know it's a heavy, well-tested machine when it actually rolls out into the wild. It actually had a fast ring prior to the anniversary update that did have this included. So people were actually kicking the tires of this even before it was included with the anniversary update. That said, again, remember, this is actually still beta. So even though Windows 10 Anniversary Edition is released, it came out in August, the capability for the Windows subsystem for Linux is still improving, still can be contributed to. So this is what you need to have for making this happen, the prerequisites. The prerequisite is that you turn on developer mode. This is a capability that we're building for developers. It's a functionality that we want to make sure that you're agreeing that, yes, I'm a developer, yes, I want to use my system in this way, and so you turn on this development mode in the update settings, update the security. I'll show you where that's at in the demo. Then you also have to turn on the feature. So it's actually a Windows feature that you turn on. Go into the Windows features and down toward the bottom, Windows subsystems for Linux. Next to it. That's where you actually enable it. Now once that's done, you can either go into a command prompt or PowerShell prompt, either one, both administrative, so administrator prompt, and simply type bash and hit enter. And that will then run the process of actually installing, pulling down the bits, you're actually pulling them down from canonical, and installing them on Windows. And once that's up and running, you can simply any other time you want to run it, you simply run bash again, it'll run into that shell, or you can, it actually installs a shortcut to a canonical logo application that you can run as well. And I'll show you what that is. This also points out that if you want to simply use PowerShell to enable this, you can do this. So the PowerShell command is shown on the screen here, enable Windows optional feature. And then you're, of course, doing it online. And the feature name being Microsoft Windows subsystem Linux. So, you install it, run bash from a command prompt. It's then going to prompt you for some additional things as well. So it's going to download and install the tool. And then, of course, the first thing you want to have is a user account, right? So it's actually going to create your first user. So you'll enter a name and it prompts you. You'll enter your password for this user. And then that is the user that, by default, when you log into this shell, that's the user you're using. Now, that doesn't preclude you from actually creating additional users, and working with it that way. But this is kind of your default administrative user. While you're logged in as that user, of course, you're going to be using sudo, apt-get, sudo, of course, being the ability to sort of set administrative credentials when you're running some command or something like that. So that's bash on Ubuntu on Windows. So, I'll go ahead and give you an demo. Now, again, remember, if things break, it's preview, so I've got that out. I can always say, wait, it's in preview. The demo didn't work because it's in preview. We're actually running this in user mode. We're running actual executables that were downloaded from online repositories, that were actual bits that run on Linux, now available on Windows 10. So let's go ahead and do that. First, before we get into that, I'll show you where we actually install that. So I right click on the start menu, I go into programs and features, and I mentioned that under programs and features, we scroll down toward the bottom. This is where I have the Windows subsystem for Linux. So you see, I do have that installed and enabled here. And also, the settings, updates and security, I go in here to for developers, looks like I've got some updates to install, and notice I've enabled developer mode. And I won't install my updates right now, we'll wait for it a little bit later. So then once I've done that, I mention I can simply run an administrative command prompt and type bash, I'll actually do some more work with a larger font for you later. But boom, there I am, I'm in bash. Now the first time you do this, of course, this is when it's actually going to do the install. So I've already done the install, it's not going to do that, it's simply going to log into this. Notice interesting thing too, I'm actually put into a mount point on a C drive in the Windows folder on the System32 folder. Does that look familiar? If I exit this, that's the folder I was in in the Windows system, right? So it's actually now, showing me what that map point looks like when I log into the bash shop. Now let me exit out of this, and instead, I've set up a shortcut on my start menu here for bash on Windows. And this is that installation that happens also. You'll find it in your list of applications once you install this. Let me go ahead and make this a little bit larger so we can have some fun with this. Make sure it's all on the screen for you. Is that font okay, or do you want that a little bit larger? Just a little bit bigger? Alright. By the way, I should show you as well, maybe you don't know this, but Command Prompts, PowerShell Prompts, and even the bash on Ubuntu on Windows has an opacity. Opacity? Opacity? So I can actually make the window kind of see-through. That's a new feature that people don't actually realize is there, but I think it's kind of interesting. I don't use it much personally, but it's kind of nice if you want to be able to see what's behind the screen when you're, or behind that command window when you're working with it. So how's that? Is that okay? Alright, that should be good. Good. So now I'm currently deposited into my home folder in this case. So if I do an LS, of course, it's going to give me a listing of the files. I've got a couple of demonstration folders and files that I've set up here for today. If I change directory to the roots, then I see a whole bunch of blue text that's really hard to read, but if you can make some of that out, you're familiar with the Linux file system. Some of these should be familiar to you. So I've got my boot, data, EDC, or Etsy, Lib64, and so on. So these are all here. They're all what you expect. You install an application. It's going to install into the bin folder and into an application folder. Now, I can also, as I showed in that last command shell, change to the C drive. Now, what's interesting about the user's folder? Well, it's a capital U, right? If I type U and hit Tab, it doesn't know what to do with it. I have that in a capital U. There you go. Case sensitive. My kevrum folder and let's go to the Documents folder, which is also a capital D. If I do a listing here, those are the files and folders that are in my Documents folder. Of course, I can look at the details and permissions and all that as well. So let's do a couple of well, actually, you might be curious about what's going to change to my home directory, is what version of Linux am I actually running here? Make sure we don't lose the bottom screen. So I'm going to enter LSB release dash A. Thank you. And yes, it is. It went to 1404.5. It's the trusty release. So we can see that here. Walked you through some of the file system. So I can run tools and utilities and anything, you know, if I want to update the system, for example. Now, I don't know if I'm actually going to find a bunch, but it seems like every time I do this, I do get a whole bunch more updates. But I can do a pseudo app get update. And it's, of course, the first time I run pseudo, it has a time, you know, it's going to actually prompt me for that password for my account. And notice where it's actually getting the updates from. This is where we expect it to be. Deb.nodesource.com security.abuntu.com trusty updates, trusty backports. So it's the same place that your Linux installations are going to get their updates from. And the same thing with app get upgrade. You can do that as well. Installing a file or installing some tool. Let's say I'm curious what my fortune is. But I've already got fortune. And I've already got the current version, so I don't have to install it. But that's as easy as it is. Just do the installation of the applications and pull it down from the online repository. And of course, if I run what my fortune is, you'll be told about it tomorrow, go home and prepare thyself. Okay, good. Tomorrow's a big day, David. All right. How about Kaosay? Very important app. Actually, you know what I should probably say since I know you should know your audience. Of course, I'm a Vikings fan and sort of a twins fan, but you know, everybody hates a packer so screw them. Of course, I can import applications one to another, right? So Kaosay can actually tell you your fortune. Silly, silly examples. Today, many, many years ago when I was playing around my friend's Unix system, he showed me this incredible game that we wasted hours and hours and hours playing called Rogue. Anybody else play Rogue back in the day? Uh-oh, what happened? Oh, I'm not using enough graphics real estate for this. In fact, it looks like it screwed up my... That's interesting. Let's reopen that. There's a bug. I gotta report that one. I just tried that, but it cleared, but then it's still giving me... Line feed. And that's another thing, too. Interesting thing between Windows and Linux file systems, right? In terms of the file formats, the carriage return line feed is different. And sometimes you'll take a text file from one, bring it to the other, and now you've got one long stream of text instead of what looked nice and formatted before. So those are the little things that you gotta watch for. But of course, all the editors that you're familiar with in the Linux environment are gonna be available to you here. So if you love Vim or Vi or whatever, you can install those and work with those here as well. Many of them are installed by the phone. Let's go ahead and close this, just reopen it so we can clear that up. And move that over a little bit, right? Well, we don't have to run a road. We'll play a road later. All right. So I have a... I mentioned that we actually do have the ability to work with X-servers and X-loving graphics. And I have actually installed a couple of tools so to run that on Windows. So if I just run this X-server, it's gonna put it down on my system tray and it's gonna make that system available to me. And I do have to export the display. And I could have put that in my BatchRC file as well, but I'm just gonna do it here, manual. Looks right. And now I can run the tools that I've downloaded that are graphical, such as XIs. Important stuff, right? So there's XIs. Follows my mouse around. How about XCalc? There's a calculator. Those calculator work. Two plus two equals four. Good. Has it not been done yet? Thank you, David. Thank you very much, thank you very much. I'm here all night. Okay. That was the other one. Clock, yeah. So just kind of a, you know, silly examples of the fact that we are running these Windows, but I'm full screen if you want to, and on top of Batch. But they're using that X-servers capabilities. In fact, let's go ahead and close these. There's actually a fun little game. Well, it was a fun little game to people that really didn't like Microsoft back in the day, or in particular, a particular founder called XBill. XBill is the story of XBill, is yet again the fate of the world rests in your hands. An evil computer hacker known only by his handle, Bill, has created an ultimate computer virus. A virus so powerful that it has the power to transmute an ordinary computer into a toaster oven. So, ooh. And the point of the game, whoops, just need to exit the game here, is to stop Bill from replacing all the operating systems we love with Windows, right? So here's coming in with Windows and he's going to replace it. Oh no, he's replacing one there. Let's get him. Let's stop him before he gets there. It's a little bit bloody when you hit him with the mouse, but it's, oh it's addictive hours and hours of entertainment. No. Go ahead and exit that. So it's interesting because, you know, hey, now we love Linux and the open source community is actually embracing us now as well, which is encouraging. Hopefully for some stuff that we're doing like this. So gosh, even beyond that, I've got a great example of another fairly intense graphic application. In fact, if I list my folders here, you kind of see one example, a little bit of hint of what it is. I've installed a freeware version of Quake on my PC and with some scripting and some examples. And my friend Paul DeCarlo actually has a great blog post on how to get this to work. I've actually got Quake running in this X server. So here it is. So we can go ahead and look for people to shoot or whatever they are, monsters. I haven't actually found one yet. I haven't played this long enough to do it. It's really kind of dark on the screen. It's kind of dark there, but kind of see what you have the capability of doing here. Close that out. All right, so that's just some example and really, again, kind of simple, silly examples, but really the proof point is that we are running native Linux binaries on this bash shell running on top of Windows. And with the support of Canonical and their Ubuntu builds, we will continue to do that. And you have a question. I was wondering about the X Windows server that you're running. Is that provided by Microsoft or somebody else? No, I found that online. It was pointed to it online. But there's a number of versions. This one was... Actually, let me open this up. Actually, another thing that one of my other teammates actually created, a kind of interesting script, a PowerShell script actually, that if I open the folder here, she has it up on GitHub, so I cloned it here. But if I open this folder in Visual Studio Code and again, I apologize for part of the screen being cut off here. But she has a Xminc set up that PS1 file that actually prompts which version you want to install and actually uses chocolate to do the install of whether or not you want to do Xminc or VXServe, which is the one I have here. And I think there was another option. No, maybe there's just the two. Anyway, she kind of scripted that to make it. But those are some of the ones and some of the URLs are here. Or you can search and find Xserver. Easy enough. So any other questions? Thank you for that. Alright. So just a quick introduction showing off some of the fact that we can actually run those binaries here. And even take advantage of some of the more graphical ones, more graphical in nature. So we saw user mode and kernel mode participating in this, Ubuntu running in user mode, the VXShell running there, being able to install tools on that. I didn't actually get into the developer tools yet, as you see on the slide here, but we'll get to those in a minute. Running on the subsystem for Linux. It's available and supported in the Windows kernel, so it is a native part of the operating system that you can turn on. It's the addition of that feature. I don't know if the developer mode will always be required for this feature. Very, very likely maybe. But the fact that we can actually work with this on a Windows system means we might be able to do with one less piece of hardware. The main point of this, the point is we want to be productive in whatever way you want to be. So what works and what doesn't? This is brand new stuff. So there's going to be gaps. It's improving all the time, but you do have to be aware that there are some things that are not going to work. For example, I'm also getting into containerization. Anybody here work with Linux containers and Docker? Anybody? Docker containers being able to have a small image that represents an application that requires a base image beneath it, then quickly installs all the pieces it needs and runs on top of an operating system. So it's not a virtual machine. It's a virtual operating system really. So it's the next level up. But we actually now support Windows containers now as well. Windows operating systems can be running in containers that way and support containers. So, and that's I'd love to be able to run Docker on Linux as an example of running Linux containers in this bash environment. But because Linux is really just, or this bash is really just a shell, there are pieces of the kernel of Linux that really don't apply here. I'm assuming that the reason Docker doesn't work in this environment is because, yeah, that requires some real knowledge of the operating system as a whole to make it work, or actually pieces of the operating system to make it work the full Linux kernel. Many popular tools work well in testing. App to get Ruby, Git, Python, G++, Quake, important tools like Quake. But there are some things to avoid. NPMs has had some issues. I've had issues with it trying to get certain things installed. The Azure command line interface, for example, the cross-platform interface running on bash, it does work really well, but there's some tricks in running the proper installation order in order to make it work properly. Go, Rust, of course, CLR also have some issues, and those issues are being fixed even as we speak. We do want to work as quickly as possible to close the gaps, and that's why we really want you to try things out as well. There's a lot of, you know, how many scenarios could there possibly be out there, right? I mean, it's crazy permutations as far as number of apps and number of combinations. So we do have a list that we're maintaining, and you can contribute it. You can watch it and watch it and look for things that you may have tried, or maybe some solutions to things you've tried that you may have found didn't work. This list is being maintained and updated all the time. So let's talk about your developer workload using bash. Out-of-the-box, simple DNS tools, tools that are built for troubleshooting, or who is, and let's look up, these are all part of the operating environment. Of course, you want to be able to do remote client connections, so SSH is supported, both as a client and as a server. That's actually one of the blog posts my friend Jessica Dean put together. I've got some links to their resources at the end of this deck, plus a link to where you can get this deck, so if you want these URLs, you can actually have them in the deck. But SSH she actually set up her window system as a SSH server and she connected through it from her Mac and was able to do some interesting development workload through that. Now that's not so tricky except she also showed how to do it with certificates, so it's automatic certificate authentication from one machine to another. No longer to have to use putty. If you want to use the SSH from the bash subsystem, yeah, you can just use that. If you want to do it straight from windows, then yeah, you can use putty. Honestly, I think there's another tool that I just heard about the other day and I don't recall what it is, but do some searching on that because there's actually some additional pieces you can do in windows. I have to investigate further to actually say specifically what that was, but I think there's other options. Telnet, of course. Integration with Visual Studio Code. This is kind of interesting. And Visual Studio Code, for those of you not familiar with it, is a very lightweight open source, actually lightweight but yet very powerful because it's extensible, coding environment. So I can actually use this to build applications, many different platforms, many different languages supported, many different plugins to add additional capabilities to supporting those languages and beautiful intelligence and text formatting and even opening up a terminal window underneath the coding window. And that terminal window, guess what? It can be your command line, it can be PowerShell and now it also can be bash. So I can actually set this up to have a terminal window at the bottom of my coding window where I have access to bash directly. There we go. So that's my next demonstration. It's kind of showing off from a developer point of view the sorts of things we can do with bash here. Can we code? Yes, we can. Let's go into that again. So I have Visual Studio Code open here but we'll come to that in just a second. Let me show you some simple command line tools here. I happen to have a number of folders that again you probably recognize some of those names. So for example, let's go into Python. So I've got a file called hello.py. How do you do hello world in Python? Hello world? Let's see. Yep, print hello world. Okay, so if I run it, yep, Python's there and so Python. What about Ruby? How do you say it in Ruby? Is it just hello world? Okay. What do I know? Let's see. Okay, so how about Ruby? Put s hello world, okay. Sure enough. Here's a tricky one. How about C++? David? It's like three lines of code. It's like three lines of code. But it has annotated every letter. Well, yeah, you got to include the upstream. You have to have a main function and you can send it to standard out. Yep, but then the results are not and of course C++ is a compiled language, right? So I have to actually compile it. We don't have FoxPro in here. Sorry, David. Let's see. Nope. It's just as hello. Okay, so it's compiled and I should be able to run hello world. Cool. What about let's see. I've got a file here called app.js. Now again, I'm not a developer. I'm usually an IT pro. So some of these examples were built by other people. So if I say things that are a little bit off, please forgive me there. But my understanding of this application is actually setting up a web server and then answering to a request. So it's actually listening on port 8000 on the local host in this case, 127.0.0.1 and it's going to respond with hello world when it's called that way. So I can do this, run it in the background and now it's running on port 8000 at local host. So I can do curl local host and I get hello world. Hey, cool. What about the browser? Hello world, very tiny up there. Oh, you can't see it. Hold on. There it is. Hello world. All right. Now, yeah, there we go. See, any other examples here. I've got some notes here so I don't forget to show you something. Let's see here. Oh yeah, visual studio code. Remember I mentioned that we can integrate to the terminal. So right now, I've just got the command line terminal opened up when I choose to open that up. So the way we would do that is we have an option to view the integrated terminal. It's just control with a back tick and that will open up the integrated terminal. But right now my default terminal is actually running command.exe. Well, I've got an example here that I'm going to copy from my friend the justice code and I'm going to close these here. Actually, it doesn't matter if they're closed. I can actually go into the preferences. So if I go to preferences, user settings, here's that file settings .json. I'm just going to copy this all into here and we're going to make sure that it's not the power shell as is enabled right now because that's the uncommitted code. Sorry if that's all there. It might be a bit big there, but let's actually close this terminal here and instead uncomment, not that, uncomment these two lines here and comment this one out. Save it. Now go ahead and close visual studio code, open it back up again and now when I open up the terminal I'm actually running the bash shell. So we can actually do our work here and actually we can do bash commands, list commands from and work with list applications right from this terminal window right into visual studio code. Now I'm going to open up, I'm going to create another folder in my bash environment here and actually I'm going to cheat just a little bit because I want to make sure I get all the commands in the proper way. So I've got a just a scratch text file that I copy and paste from here, but I'm going to create I'm going to do this here. I'm going to create a I'm going to clone a repository. So I've created a repository up in GitHub that I call Jekyll demo and I'm going to clone it to the local system and I'm going to work in that folder. Let's actually do it in the documents folder though. So if I, oh it hasn't been created yet, wrong one, this repository because I have git installed pulls it down and it's an empty repository. I just created it in GitHub so I haven't done anything with it. If I look at what I have here I'll see if I can go to that folder that was just created. I actually have a readme and if I look at the long list of files here there's a gitignore file as well that came out from GitHub and a configuration file. So these are basically I have now a new repository. Let's open that up in visual studio code. So I'm going to open up that folder here and what that will show me is that I currently only have those two files but I'm going to run a command to create a Jekyll application a new Jekyll application in this folder and we're going to see these files show up in visual studio code. So if I have to force the new because there's files already in the folder and put it in the local folder it's going to create this new Jekyll application for me. I may see an error on this, hold on a second. For some reason the I guess that worked, let's see, nope. Let's try this again. Again in preview some things work, sometimes they don't, you run it the second time and it works. But now I've actually got that application created so I can go back to visual studio code and there's those files but what's interesting also is that these files are not only here let's go and get that bigger here but because I've integrated this and this is interesting it's not showing this, there they are. The changes also show up in visual studio code. Visual studio code also integrates with GitHub and it knows that this happens to be a repository that I've cloned and so it also shows me that I've got seven files that have actually changed and I can actually integrate with Git both locally as well as with my online repository to say, okay, commit these changes here, alright, go ahead and sync them up to my cloud repository. That's pretty cool. Let's go ahead and edit one of these files. I've got the config.yaml files actually where the title of my web application is going to be so I'm going to just make a modification here. Go Vikings. No, I won't do that to you. Okay, and we'll save that file and now I'm going to go back to my, and again I could do this from the terminal window as well. It's just a little easier to see in this Ubuntu window here, in the bash window. So now I will go ahead and Jekyll run with the right command. I just want to make sure Jekyll serve, sorry, Jekyll serve. So we'll paste that here. But I have to not type Jekyll, Jekyll, just Jekyll. There we go. Alright, so the app is running and it says the server address is 127.0.0.4000 so let's open it up on port 4000 and if I copy that properly to the clipboard open up a browser go to that web application there it is, go Cubs. So running the local web application that local server. Now, this is a partial demo, okay. The reason I say this is a partial demo is because ultimately what I can do with this because I also have the azure command line tools installed here I could connect to azure from my local system. You know what, I can do that part of it anyway. Let's do that. Control C does want it to stop. There we go. So yeah, I'll just go ahead and do an azure log in. So if I just run azure we'll actually see that the tools are installed and it'll show a nice little ASCII text azure cloud in there. It's kind of cool. But to log into my azure subscription it's just azure log in and whenever you're using the azure command line interface and trying to log into the account you're given a note to say go to this location aka.ms slash device log in and enter a code that's authorized. So it knows that this is actually coming from someone we trust and that web application is actually going to then prompt me to log into my account so aka.ms device log in paste the code here sees that and recognizes it and I continue and now it's going to prompt me for some credentials. So I'm going to go ahead and use my corporate account here. So it's logged me into it in the browser and actually if I open a new tab and go to portal.azure.com I've already authenticated and this browser will actually bring me straight in there as well. But back in the Ubuntu world it says log in okay good cool so I can do azure commands I can list my resource groups for example maybe not azure is it list group well I don't remember anyway the oh interesting the default mode is azure service service management that could be why azure config mode azure resource manager let's try azure group list sure enough there they are resource groups a little more azure than we were supposed to be doing tonight but the point being I could actually run a command like this that creates an azure website and then I can use get to push my changes any changes that I make that code in that Jekyll folder not only to give up but also up to my azure website and use this to actually publish new changes to the azure website directly from the fan line here in bash so just another good example of how we can connect these services in a workflow that really makes sense particularly when you're now getting to the point where you're publishing it to a cloud based location so I'm going to give you a call to action here as I mentioned earlier we do need your help this is a solution that really needs lots of eyes and of course the more eyes the better kick the tires for us this is in Windows 10 it's available now in the current public release just enable developer mode enable the feature just run bash install it start playing with it and see if you can break it in fact for those of you that are linux experts much more than me we'll just take a quick second to try to break our linux environment right here so come up with some commands that might actually mess my system up if you would think about it for right now we'll do it in a second do tell us what's broken give us examples of what works and if there are things that you want changed certainly we want to hear about that you can share your experiences with the user voice pages of Microsoft you can share your experiences with the team you can share your experiences directly to the product manager he is actually making himself available as well his name is Richard Turner his twitter is at the bottom of this screen here so get into that user voice go to github and look at the issues, the list of issues people have found and resolution the community has been really great a lot of the back and forth of this didn't work other people give ideas of what they tried that actually did work or fixed a particular problem and of course the product team is eating it up and taking good advantage of your feedback so please please please do that for us here's some additional resources that you started again these are links to blogs from some of my teammates as well as some of the resources from my blog and my facebook location and twitter handle is actually just Kevin Remedy but if you want to contact me there don't worry about writing all these down though because the last link here on this slide is aka.ms slash b-o-u-o-w that doesn't have to be capitalized that way I just did it for readability that stands for bash on Ubuntu on Windows so aka.ms b-o-u-o-w we'll get you to my OneDrive presentation and go ahead and take advantage of that download these and take advantage of the URLs and again, please help, please contribute to this we really appreciate it any other questions before we try to break my Ubuntu installation here but let's wait to do that one last great, that's a good idea now should we ask what about other shelves none of the shelves at this time no, we've been working very closely with Canonical and making Ubuntu work on Windows that means we have to actually be like I said, mapping calls to like commands in the Windows subsystem or actually creating the functionality on the Windows side so what would happen if you would if you simply install them oh, that's good, well I don't know that's something we can actually try but actually, you know, you just reminded me of another demo I can do before we do that I'm going to close this X server here this is actually running that this is a Windows version I've got actually another kind of a cool example I'm going to run a full screen server take the defaults there now that full screen server of course is very black right now, there's nothing running in it but if I go back here and see the command was I've actually installed X Ubuntu desktop that took about 40 minutes to install so it's not for the faint of heart I've seen other Ubuntu desktops available also but if I go back to that server you can't see the whole screen here but I've actually got the file system list here the home folder although I think it's going to give me an error initially when I run this this is embarrassing I've actually got Firefox running on a patch on Ubuntu on Windows so we've got the Linux version of Firefox running here so you can do a lot with this so I'm going to if it can be installed it's another shell why can't you just run it? I don't know how to do it do you tell me how to do it? ok let me close this up here yeah, for fun for sure apps up sudo get install tcsh alright wait oh yeah ok so then what do I do how do I know I've got tcsh because I don't have colors that's one indication well you can ps ok ps oh there it is sure sure seems to be working I mean you can run a test suite or something like that that's interesting tcsh yeah exe tcsh good to know, thank you let's get another one up here what would you like to do? if you try the gimp it's new image I haven't tried it but no I'm going to guess it would work but I haven't tried it let me get that from you at the end here because I definitely want to try that you said you installed the desktop right? yeah what was it again? I don't have the server running let me just go ahead and run the server again ok so say again gimp ok couldn't quite hear it can I open display do I have to export display? how do I do that? look at that so it's obviously not working yeah it does you know there's actually a 3D paint now available you can actually build 3D yeah 3D paint look at the windows store for it yeah is it, do you know David do you know the 3D paint in windows? there's a 3D version of paint Microsoft Paint it was a rumor for a while it was a rumor for a while oh was it in the center? yeah maybe it will be cool other things you want to try? let's try to break it run system D ok say what? do it again? run system D run system is that one word? install no installation candidate by that name services ok looks like it didn't install what do I do with it? why are you thinking of that let me just go ahead turn off developer mode see what happens with that can I actually do that do you know David is that a one time choice? let's just side load apps but it's also required for the subsystem for linux I'm not sure if just turning on side loading apps developer mode is as much as I can do it looks like you can't actually turn it off no that's not true you know we have the what's that called the moonlighting clauses? yeah and that may require a restart too but I'll just go ahead and close this and try to reopen it up again well hey you know what you're not running that now so you do need that did you get it turned off? not only in that developer mode so it just wouldn't run interesting so if it was already running let's see let's suppose you get something going out well it doesn't appear to stop it but it won't let me run it again how about emails? oh yeah let's go ahead and turn that back on again nope I don't think I have installed them application? well then we might be standing here watching it down from time to time any other questions while we're installing more stuff? windows file system features and expansions that are not you have to well in the shell you can navigate to the file system the windows file system and also in the windows file system you can navigate to the linux system I'll actually show you where that's at but after I show you this there only because like I said you can actually mess things up but it's actually under the app data folder local under your profile and it's the lxss folder so here's my file system that's kind of where it's hidden but again do be careful if I start going in here and start editing files my c++ application for example the entire folder subtrees by playing around with files using the explorer here in windows so it's very very delicate right now I suspect that they're going to try to make it more robust eventually and maybe not even hide it as much as they are here but for right now it's very delicate oh good okay so enex there we go I'm sorry the you started a new shell so the explorer is going okay oh alright yeah you're right so oh I see what you're saying okay so let's I didn't probably have to do that got it my server's still running I guess you've already showed this that the clipboard works back and forth yeah yeah it's a right click you can paste that away control V no right click on the mouse yeah that's a great question um I don't know I should think it'd be nice enough it would be nice of them to say oh well that's a windows program we'll go ahead and open it up in a window but honestly I haven't given a try out to give that a try out I don't think I have a console I can so oh by the way what am I supposed to while we're in the emacs piece what am I supposed to say yeah okay alright so that piece didn't work so great there you go well that's what I'm expecting you guys so um so uh yeah let's see what do we have well there's no pad installed there it is nope that's a that question okay cool thank you this is great I'm learning so much I appreciate you guys doing this great anything else I really appreciate your time tonight hopefully you found this useful enjoy your evening and uh safe trail as well thanks very much that was the end by the way