Welcome to Change Log and Friends, a weekly talk show about backslashes. Still being trash. Thanks, as always, to our partners at Fly.io, the public cloud built for developers who ship. We love Fly. You might, too. Learn all about it at Fly.io. Okay, let's talk. Well, friends, you know I'm excited about the next generation of Heroku. Who isn't? Well, I'm here with Chris Peterson, Senior Director of Product Management for Heroku at Salesforce. Chris, tell me, why should developers be excited? To the firm platform, what does that mean to you as a Heroku developer? It means a few things. One, it means that...
We're going to be working on investing in our ecosystem. One of the standards we're adopting, OpenTelemetry, is a big step up over the way Heroku's done metrics traditionally. We had a piece of technology called L2Met that converted logs into something that kind of approximated OpenTelemetry metrics. But now there's like a real standard. There's like a real toolkit and there's a whole ecosystem around OTEL. And so being able to have OpenTelemetry dashboards out of the box and our partners that tap into all of your Heroku telemetry so that you don't have to go build a dashboard and you're not necessarily constrained to what we provide on our dashboard is exactly the type of value we're seeing out of this. So it's tapping into the ecosystem. Similarly, cloud-native build packs. One of the features that I'm excited about is supply chain security that we're going to be working on later this year.
But that was an open source contribution. So the C&B project itself, Bloomberg actually contributed support for software build materials generation. And so the things that I'm excited about are the things that developers are excited about, which is we're not going it alone. We're not building a proprietary solution. We're using the same tools and technologies as other superstars in the industry are. And we have to play into that ecosystem effect. A huge part of Paroku's value has always been the element of the marketplace, being able to bring in databases and key value stores and telemetry and observability tools. And so renewing our investment in open standards lets us renew our investment in our ecosystem and marketplace. Very cool. So how is this next generation and what is coming changing the game for you and the product team?
To me, on the product team, let's be put out a roadmap that's way more ambitious than what I could do if we were trying to build some of the primitives ourselves. Kubernetes has really established networking technology. That means our roadmap has a lot of networking features that our customers have been asking for for a while that we're going to be a lot slower to build on the Cedar stack than they are on the first stack. And so you should be excited about the open standards and the modernization there on day one. But the thing that I'm excited about is what we can do by the end of the year in terms of roadmap and features, not just getting to parity on some of the more nuanced features that we have on Cedar.
but also the new things that we could build, taking advantage of AWS BPC endpoints, which is something that Salesforce customers wanted for a while. There's a huge number of these features that just wouldn't be possible to get done this year otherwise. And that's where I'm excited. Very cool. I love that. Well, friends, the next generation of Heroku, I'm excited about it. I hope you're excited about it. I know a lot of people who have been really, really looking forward to the next thing from Heroku. To learn more, go to heroku.com slash Chinglog podcast and get excited about what's to come for Heroku. Once again, heroku.com slash Chinglog podcast.
We are taking you back to Microsoft Build 2025. Next up, we sit down with Craig Loewin for a deep dive on Windows subsystem for Linux. Here's Craig. Let's begin here, then. How about this? We asked for somebody who can school us in WSL. Nice. OK. Are you the one? I'm the one. All the things. Where should we begin? What should the world know about WSL? So the big news this week is that we took the Windows Subsystem for Linux. Yes. And we open sourced it. So what exactly does that mean? Because we actually have a bunch of different aspects of WSL. It touches a lot of different places in the OS. And to put it in a sentence, what we did is we took the code, the logic that says, give me a Linux VM.
make all of my Windows files access it, give me access to the GPU, took all of that, and that is open sourced. And so that joins some of the other projects that we already have open source, like the kernel that powers WSL is open source, as well as our graphical library. basically repository called WSLG to power GUI apps in WSL, also open source. So the only thing that's not open source these days is the WSL1 implementation. Which is the old version. It's not the default anymore. And the reason why we're leaving that closed source is because it's very tied to the Windows image. Whereas everything that we've done now, we've been able to remove it from the Windows image. It ships out of the Windows image. So now we're able to fully open source it. You have to enable it and install it too, right? Right. So you can run WSL dash dash install to install the full thing. But what that does is it...
Installs an MSI from GitHub, which does the WSL logic, and then it enables the virtual machine platform optional component in Windows, which gives you virtualization. The thing that bugs me about Windows is And I'm new to it, so it's not even a criticism. It's just more like I don't know how to do it, and it seems hard to do it. It seems like it should be more logical. It's how to make it dev mode. Oh, I see. To go from Windows Pro to dev mode. I'm coming for WSL. I'm coming for the awesomeness that Windows is. But the marriage of Linux and the Linuxes of the world in concert with Windows and running RSync and HTOP on just different Linux commands in this Windows world is a really cool thing, I think. And I feel like WSL is going to keep making that better and better and better and potentially draw...
Mac users over to this world, I went back from things, it's only on the iOS Mac platform as a to-do platform, to Todoist, because Todoist is everywhere. And it's so fast on Windows. Like, I click on the icon and it's up. On Mac, I click the icon, I wait, and I wait, and I wait, and I wait, and then it's up. And the experience on Windows machine is like night and day. But WSL is why I'm coming. For sure. And we actually, so the team that I work on is the developer experiences on Windows team. And we own some other different areas, like Windows Power Toys, as well as Windows Terminal. And so we are trying to bring a lot of that, hey, like...
I love using Windows because this developer-focused feature, trying to bring that to those experiences. So one of the other things that we just did this year at Build was in Windows settings, we made advanced settings a page. So it takes a lot of those feature requests of things like, hey, I want to turn on. One of the things we added there was long file paths is now a toggle there, which is awesome. Being able to turn on end task again. So you right-click on something in the taskbar, and it has end task. We put all of those in one place. So for your question of, hey, how would I get dev mode? I would really recommend checking out the advanced settings page. And you can flip through that.
and it should really quickly set you up. How about this? How about this? Instead of that, how about y'all create a, would you call it a Tui in PowerShell? Like you said the GUI, the WSL GUIs. Why don't you do a GUI app that gives me a menu that says yes, yes, yes, no, no, no, take away, move, like the title scripts do and things like that to make it Windows kind of for everybody and kind of Windows for everybody plus developers. Make it a little bit more like hands-on guided tour versus figure it out, which is kind of like that's an answer. Go check out the settings menu. That's good, but it's not the guided tour. For sure. Like you're wanting a, hey, like,
Let me run through this, you know, maybe an extra setup. Are you asking for a wizard? Is that what you're asking for? A wizard? It really is. Well, Titus Scripts, I forget what it's called. I think it's called Titus Scripts. Yeah. It's Chris Titus. He's well-known out there on YouTube. We'll link in the show notes. But, like, I use whatever he suggests. And it's this GUI that does that. But it's third party. Right. Not to say that it's bad or good. I don't even know how to qualify that. But bring that in-house. Like, you have a massive amount of developers. Just make it easier for developers to use your machine.
is what I want. Totally. And that's a really cool idea. And I think some of the other things that we're working on that would work really well with something like that are a Winget. And you might have seen the Windows package manager being able to Winget install. I can install things directly through that. The other cool feature that's coming out of that is Winget configure. So what's neat is you have a YAML file, and it's a...
description of the state of your computer. So you're saying, I have these apps installed, and these are the status of my settings. And what's neat about that is you go, winget configure, apply this configuration, and it will put your computer in that state. Which is awesome, because I actually use that as my setup script. That's so wild. And it's not even a script, because I can apply it to a machine at any time. I don't have to worry about, oh, is this going to mess anything up or change it? Because it's not a script running that's running commands that could fail. It's literally checking, is this thing installed? If it's not, install it, which is a pretty powerful tool.
Yeah, there's a lot of cool things happening there. And it goes back to almost like that. I mentioned to Jared in other shows, and obviously he and I podcast, and you're the newbie here, right? No offense. But I've told him before, I've been podcasting for a very long time. And I think this show was at least 12 years ago. And it was the Microsoft before VS Code. It was the Microsoft before TypeScript. It was the Microsoft when you had less developer love.
And you all were kind of like making the seemingly good choices to have this comeback, so to speak. Because in my eyes, you were less cool and everything Mac was super cool, you know, just generally. But there was a major shift there. And I was calling. I was like, you know what? Because of this, I can't remember what it was. It was around 12 years ago. Because of something y'all did, I'm like, they're going to be coming back. They're going to start doing things because I'm seeing this change. And it's not this accident. It's on purpose. And I feel like a lot of this is just like, there's such cool stuff in there. So WSL is a big part of that. So tell me about...
the cool things you can do with WSL, and specifically WSL 2? So the primary use case for the Windows system for Linux or WSL is running your Linux workflows, apps, tools, utilities, and more. And so it really runs the gamut of what you're able to do with it. For example, the Minecraft team at Microsoft, they program Minecraft. They use WSL to actually do that. We see teams who have...
make the Linux kernel for Azure and both for WSL. They also use WSL. Even if you remember the Android phone that Microsoft made, the Surface Duo, that was also programmed with WSL. And so what I kind of love about it is it is this really wide range of customer base that we get, of use cases that you get with it. And anything from, hey, I want to build a website, I want to train an AI model, you know, or program a phone are things you're able to do with it. And so it is a pretty powerful tool. Yeah, for sure. Can you explain to me exactly how it works? Yes. Without whiteboarding, you know, do your best, but.
You're right. So the architecture is we actually have a virtual machine that powers it. And it's a virtual machine that we actually took that technology, took as in quotes, from Azure. And so it's a utility VM, a lightweight utility VM. And we have a kernel in it that's preloaded, so we kind of skip the...
necessary boot process. We basically go from cold start to ready to bash terminal that's ready for input in about two seconds on average, which is like blindingly fast to pull up a full VM. And we also get a lot of other cool benefits from using that tech, like the amount of memory that we have in that VM expands and shrinks as you use it over time. And so we do a lot of work to try and conserve all of your resources so it feels like the same machine. So what really happens is you run WSL.exe, and then we have a service on Windows that goes and talks to, there's a set of APIs called the host compute service. That depends on
a subset of Hyper-V APIs based on the virtual machine platform component. And it talks to that and says, give me a VM. So we get one of those lightweight VMs. We load the Linux kernel in it, which is included with the WSL package. And then we start a single VM. And we have our own custom init process inside of that. So we start this Linux process. And then we take a look and say, OK, what distro is the user loading?
So the user's saying, like, I'm loading Ubuntu. And we say, OK, we find that VHD where the user has their Ubuntu data. And then we load that and mount that into our WSL VM. And so all of your distros, when you're running them simultaneously in the same VM, they're running almost like containers because they're separated by namespaces in Linux. And so you're running it there. And then we do some final work to basically do some plug and play bits. Like we mount your Windows drives for you. We do some work to mount your GPU. We have a special GPU device. We basically do the finishing touches. And then after that, we load that VM and connect to the standard in and out. Then you're done.
So it touches a lot of different parts in the OS, but it's pretty cool that that all happens in two seconds. In two seconds. Yeah. And that's the first time you use it, obviously, like after a reboot or whatever. It's going to stay running. So it's just a VM running, basically. Exactly. And do you manage it like a VM? Like turn it on, turn it off, pause it, et cetera?
You can, but we try to make it that invisible to the user. And so what we do is we listen if there's any open file handles on Windows. That's a technical term, but really it's, hey, do you have a terminal window open? Do you have anything listening for the output of WSL.exe? And if you don't, say I close all my terminal windows, we go, oh, you're done using WSL. We wait a minute, and then we shut down the VM for you. And then when you go and start it up again, we start it up again for you, because the startup time is so small. We can save a lot of resources on your computer. And the way you get to, so tell them how you get to Ubuntu.
Oh, so pretty easy. All you got to do is go to, if you literally go to your command prompt or PowerShell and type WSL space dash dash install, it will set up everything for you. You will probably need to reboot to enable virtualization if it's a fresh machine. And then once you reboot, Ubuntu will install automatically. And then after that, it will just open. You type in your username and password, and then you'll be at bash. And from there, you can open up Terminal, and you'll have an Ubuntu profile with Ubuntu coloring and graphics. You can run full of GUI graphic apps. And we also now have support from a ton of new distros like Red Hat.
Fedora, Arch Linux, and more. Joining the family with distros like Debian and OpenSUSE that have been there for a while. Here's a question slash idea. And I'd say it's an idea if it's a brand new thing. Unless you've already built it, then it would not be an idea. And so I'm a fan of Proxmox. Are you fan of Proxmox? Do you understand Proxmox? No. Okay, so Proxmox is an open source Hyper-V for Linux. And so you can run a hypervisor, which is Proxmox, and you can install Linux, you can do VMs, essentially. When will, or is it on the roadmap to make WSL?
like that. Because I love it because I can run one single machine in all my Linuxes, and then marrying this with this potentially, hey, Adam's no longer a Mac user, now he's a Windows user, but I also want to command an army of... Linux, you know? It's one thing. It's even IP addresses. Like, IPv has IP addresses and everything. Full network, but they're VMs. Oh, I see. Are you wanting to run, like, multiple different virtual machines running Linux? Yeah. And what would be the use case for it? Well, one might be running PyHole, for example. Got it. One might be running Plex. Yeah. And that machine will have a mount automatically mounted on boot from my NAS, which is a whole separate machine that's running true NAS. And so that's a dedicated, you know, NAS.
appliance for the whole network, right? Everything can store things there. Everyone in my family has access to it, and it's all authenticated, and it's provisioned, and it's ZFS. It's amazing. So that VM that could be running WSL versus Proxmox would run Plex. I see. And then where is Hyper-V falling short for you for using that kind of scenario today? It's not on Windows.
On Hyper-V? Is Hyper-V does that? I'm not a Windows user, so I don't want to use to get there. So does Hyper-V do it by itself? This is a thing? So on Hyper-V, you could set up a full VM. I think this is a great question, which we get on the WSL team. What's the difference between using WSL and Hyper-V? That's my question, I guess. Right, exactly. Rewind as if that was the question. Great question. I knew what I wanted, but I didn't know existed. What's out there that does it? Exactly. And so the answer there is...
WSL does use Hyper-V under the hood, right? But WSL is kind of the more specialized use case. So Hyper-V is going to give you a lot more of that fine-grained detail control, right? You're wanting, I want multiple VMs. I want to control exactly what mounts. I want to control exactly the networking behavior, NAT versus something else, et cetera. Having that level of fine-grained control over the virtual machines totally is a Hyper-V scenario. And for the scenario described, I think Hyper-V would meet those needs.
So where does WSL come into the play if Hyper-V behaves like that? The answer there is WSL is mainly trying to simplify that experience for a developer in a dev environment. Like Hyper-V, you're able to grab any Linux distro. You can set it up. You can have a full virtual machine and get it ready to go. But by nature of the extra layers of customization, that can take a little bit more time and setup. WSL is like the fast track of, I want to get started as quickly as possible. Just drop me an Ubuntu, and I want my GPU to work just as it would on a Linux device, and everything's pulled over. We kind of set that all up for you and make that just really easy to use from A to Z. That's totally our goal. Gotcha.
Is Hyper-V a non-Microsoft product? Is it somebody else's? Does it cost money? Is it open source? What is Hyper-V? So Hyper-V is based in Windows. It's a Windows feature. So it's an optional component that you can turn on and off inside of Windows. And it's available only on Pro SKUs and other SKUs as well. So it's not available on home as one of the other devices. I have Pro. I'm cool. Okay, great. So you'll be totally set up. Yeah, so you can just go to turn Windows features on or off, enable Hyper-V, and then you'll be fully able to access it. And it's made and supported by Microsoft. Okay. How's the UI for it? Describe the interface. The interface is there's a Hyper-V manager, and then it has the ability to go in and...
enable and turn on and off and create or delete these virtual machines there. What is it like to do PCIe pass-through? Can you do things like that? How complex can you make these VMs? There's a lot more ability to make those complex. Specifically, since I'm the product manager for WSL, Hyper-V is a much broader set of capabilities. For advanced things like PCI Express, best to go get statements from the Hyper-V team. You know there's GPU pass-through because you're using it. Right. So PCIe.
Gotcha. Probably some sort of interface to manage those things. I was curious about that. Probably. I mean, in the past, just as an example, these questions are less like enterprise because probably no one's doing that necessarily. But maybe they are. Maybe in dev environments. But it's more like a home lab question. So my curiosity was like, okay, I was beginning to tinker with the various NAS opportunities out there. And I was like, I want to play with it in a VM. And I want to pass through some virtual drives to this thing. Right. And sort of have a skunkworks of a true NAS install or an Unraid install or whatever it might be. And so my lure to Windows at this point is that WSL.
being there, and then obviously Hyper-V, enable these cool things while also running a very cool operating system alongside. I can have my cake and eat it too. Totally. And that's probably one of my favorite things about working on WSL, is that there's a lot of reasons that I love Linux. I studied robotics in university, and we use a lot of Linux to program robots, things like ROS, like the robotic operating system, et cetera. Very Linux-focused. And so I do love using Linux, but there's so much that I love about using Windows as well. For example, I really enjoy games.
And being able to have my full set of games and they work just as I've used them for a long time on Windows is awesome. And now I have the ability to kind of run those both simultaneously on the same box has been amazing. Yeah, now having a KVM or something like that, how can we make it faster? Latency is probably the biggest concern. Like, first of all, where does latency come from? How do you shrink it? What do you all do against it? Can you make it faster? Is it the fastest it'll ever be the latency between, you know, a Linux command on a Windows file system? You know, what's the beans there? Totally. There's actually a really cool website, veronix.com. They're a third-party website, not directly affiliated with Microsoft.
And they write articles about, hey, they compare on the same hardware, what's the performance for the Windows Hub system for Linux versus a bare metal version of Linux. And we do take a look at those and say, hey, this is a great understanding of where our performance is and maybe areas we can improve. In general, it's about a 5% virtualization tax, 5% to 10%. It depends on what you're doing. Surprisingly, there's actually scenarios where WSL is faster than bare metal Linux just because of the nature of how things are set up. There are speeds. There are scenarios where that works.
And there's also scenarios where we're going to be slower, especially around things like heavy I.O. is an area where we want to perhaps see some speed improvements. And so that is probably one of the areas that we want to improve. But I would say in general, if you're looking for speed and performance, we're very comparable to bare metal Linux, which is pretty great. So you've all been open source for five days? Two days at this point. Officially, perhaps. The open source.
The initial open source commit was five days ago. Right. That's when we froze it. We froze the build. Gotcha. But you didn't actually hit the button in GitHub until two days ago. Exactly. All right. So we're both right. All right. We're both right. Exactly. He's a litigator. He needs these details to be clear. Okay. Go continue, Jared. Well, I'm just curious. I mean, 23,000 stars, huge press, obviously, 1.1 thousand issues open.
Interestingly, a lot of these seem like they're before that. So maybe a lot of these issues are using this internally. So we actually had the repository open for a long time before this. We didn't talk about it. Yeah, we use it as our public facing. Let's interact with the community. Okay, the code wasn't there. Yes, exactly. So no code was available there. But it was, hey, are you having an issue? Us on the WSL team would take a look.
communicate with that community there. That's an interesting thing to point out, too, because there's this idea of, obviously, open source. We all get that. But then also, the line between end user to development team making the thing is often so obscure that you don't even attempt it. And what you did was create a direct path. If you've got WSL thoughts, come say hi.
Yeah, exactly. That's kind of cool. Even though it was an open source, you were doing open things. Yeah, exactly. And that was pretty awesome for us and really helpful. We got so many good community feedback and requests. And what's awesome is even before we open sourced, people were making projects for and with WSL. Some users would take a look at our code when we make updates and be like, oh, they added the string of a feature that we hadn't announced and then write a blog about how to go access and use that. Someone even wrote a fix with a private binary of how to use WSL with 64 cores and more. So we're really excited to open source now and finally be able to say, hey, OK, we know there's tons of excitement. Now you do have full access to really party.
with WSL. How do you parse out those contributions and decide which ones are good, bad, indifferent? Like, ah, we're going to take this idea and do it ourselves, or we're going to merge this in and give you credit. Or we're going to ignore this because actually it doesn't align with Microsoft's vision, et cetera. Yeah, it's a really good question. And something that's pretty difficult to do, I think, to kind of do that well, be respectful to the community, get good community contributions, but also have a clear vision and an understanding of the product. I think it comes down to very clearly having a mission.
statement and goal for WSL. I think people use it for a lot of different things and they'll say, maybe I want it to work in this way, very specific to my scenario. But WSL at the end of the day is a way, it's for developer scenarios. It's for the ability to run Linux tools for development on Windows. And having that kind of front and center really helps guide us of when we look at a contribution, is that helping that mission statement? Can we then give feedback and say, if you change it in these ways, that would be better. We'll be able to contribute it or add it and merge it into the product. And so that's really our goal. Gotcha.
So that helps guide your decision-making process. If you were to categorize or summarize, if you were an LLM and I said, summarize these 1,100 issues. You know what I'm saying? He's got a sum on his pulse. Oh, my gosh. I love it. Continue. I'm sorry. I was thinking about what are the kind of things that people are requesting or maybe even hitting up against, like, towards that mission, like, where are you? And what kind of stuff is still in the way? Is there, like, you know, 50% of our issues are this thing or 20% are that thing? For sure. I would say it's a variety, and it's changed over time. And so the 1,100 issues that are open right now are just, you know, a lot of them are kind of feature requests of things we'd like to see. And it's definitely a variety of things. And there's so many more closed issues, actually. I think we're at, like, maybe...
10,000 or more. I can tell you. Yes, 10,400. So I'm not picking on you by saying there's 1,100 open. Right, right. Only 10%. Yeah, that's pretty good, right? It's kind of a difficult question to summarize, but I would say the top issues that are on my mind for it are, how do we improve our ability to use memory in WSL? How do we make it faster to access your files on Windows from WSL and vice versa? How do we...
improve the ability for your disk space to automatically expand and then shrink once you're done using it? How do we improve the ability for people who are building on top of or with WSL, like Docker Desktop, Podman Desktop, NVIDIA, and more? How do we empower those organizations and products to have an awesome Linux experience when using that? I'd say those are my kind of top of mind. Gotcha. Here's an example from what he's saying here, too. So an example of speed up the file system is, I'm just on Windows, Jared. I open up what is terminal. I think it's called PowerShell, right? Right. You open a PowerShell, and you go into your Ubuntu, which I always forget how to, so I have to just up arrow until I see WSL.
But there's a way. Was it WSL dash dash? WSL.exe. We'll just land you right in there. Okay. So WSL.exe in this thing. And now you're in a shell that has rsync. And so you're running Windows. You're in a terminal. And you're running rsync. It's not going to take some files on this Windows machine because I've ran whatever through compression to put it into long-term storage or whatever. And I do that. And I run that command, which is a bash script, probably on that same open to image. And then I would rsync it over to the NAS on the Windows machine. That's badass. That's awesome, dude. Does that get you excited? I mean, it's cool. I mean, isn't that cool? It is cool. That's dope.
I think so, too. They've embraced Linux that well to enable. I mean, it's fast. It's so fast. Teach me about the file mappings. You know, how you're actually accomplishing that. The backslashes. Oh, yes. Play that song, Jason. Play that song. There's a place I'm driving towards, which is that I think backslashes are trash. I despise backslashes, okay? They disgust me. This is one of the primary reasons why I don't like Windows. It uses backslashes in its path names. Forward slashes are cool. I'm down with underscores. Hyphens are okay.
The pipe character's fine. I'm even okay with the tilde. And backticks, all good. But backslashes, get those dreadful characters out of my face before I slap someone. And I'm looking at you, PHP namespaces. Matt, do you have, have you thought of any good lyrics, any rhythms and rhymes for the backslash? This song could be called Backslashes are the Worst. It could be like Backslash, You Disgust Me. I would just call it Backslash. By Matt Reier. I don't even mind bash. I like cashing and cash. And I'll clash with a dash and a flash, man. I'm not gonna say gash.
I don't even mind hash. I'm out on the lash, man. I got a rash. Oh my gosh, man. I'm gonna smash your face and if you backslash me, that's trash. Backslash is a trash. Backslash is a trash. Yeah, backslash is a trash. Don't say forward slash. Just say slash. Just say slash. No need to say the forward bit.
You're a forward slash only driver. And I'm wondering, I was going to bring this up at the advanced settings. I was like, this could be an advanced setting. Like, please, I know this runs deep in the file system, but please, let's use forward slashes in my windows. So eventually we'll get there. But how does the, so if I hit WSL.axe, I'm dropped into Ubuntu. Yep. Where am I in my file system? So you start in your Linux file system. Right. So I'm like at the root or my home drive. Your home drive, right? So if you do PWD, you're like at home slash Craig would be. Sure.
If I'm in yours, it's weird, man. That's not my directory. But if you start there, that gives you the best performance. That's why we start you there. Because obviously, Linux binaries to Linux files gives you the best perf. But you can go to the Windows file system.
So if you go to cd slash mount, you'll find all your drives. So cd forward slash, your favorite. So your c directory is mounted in your slash mount. Exactly. And so you can go to mount c, then you can access your whole Windows files from there. And that's what you're doing with your rsync. Right. And you can have all your Linux. I nodded to the audience. I nodded to Jeremy. He leaned over and asked me that question. Continue, Craig. So you can have your forward slashes and go fully, go through your c drive. You can run bash scripts on your c drive. You can run whatever Linux commands you want, like rsync, totally accessing everything. And what's cool is all of that is done through your Windows user access. So behind the scenes, we actually have a file server that we set up.
It uses a protocol called Plan 9, P9 protocol. And we have a file server set up both in Linux and on Windows to serve their files to each other. So wherever you are, there's some people who prefer backslashes. You can go access the Linux files with backslashes and go edit all that. You can open stuff with notepad.exe and access the files from there. So if I launch notepad.exe and I go file open, is that how it works?
I don't know. Yes. Sounds right. I can confirm that. He's an expert. Yes. I'm still learning, so I don't know. How would I navigate to my Etsy directory in Ubuntu to edit a config file or something? So you could go file open in Notepad. And then in File Explorer, we have a Linux section. So on the left side of File Explorer, there's all that quick access menu ribbon for my computer or things like that network. Craig's computer. Yeah, Craig's computer, if you're on my computer. Get on Craig's home drive, yeah. And at the bottom, we've added a Linux logo when WSL is installed. You can click that.
and then you can find all of your Linux distros there. So I would click Linux, Ubuntu, slash, et cetera, and then I would be able to access all my config from that. Do those files exist when WSL.exe is not running, or do they only exist once it's running? They do exist when WSL is not running, but the top-level folder will exist. When you open that, we spin up the WSL VM so we can serve it to you.
Pretty seamless then. Right. And kind of my favorite part. It's so well baked in. That's what I was thinking. It's so well baked into Windows. I love it. Right. And that's kind of been our goal of we want it to feel like one machine. And kind of, you know, there are folks who prefer backslashes, folks who prefer frontlashes. You can use either or, right? Yeah. Someone say neither. Only the one. Only the one. Sorry. And like some people prefer GUI, like their editor, they run it fully in Linux. Right. They run a Linux editor from WSL. And I'm a VS Code fan. And I love Vim. So I have Vim like bindings in VS Code. And I run everything.
that connects to WSL. So it's the Windows UI with Linux backend in VS Code. That's how I set it up, which is pretty awesome. Okay. I mean, it really is cool. And you can run the same thing inside of Linux. Like VS Code on Linux, right? Yes. But it's just more native, I guess, with Windows. Totally. And even if I'm, because I'm pulling up stuff on Windows projects as well, all my extensions are saved, all my settings are saved across it. Why not just rock Vim directly? You know, I like VS Code. All right, fair. I like the Shift-Control-Key command palette. Sure, you've got to have your co-pilot up in there. Yeah, that's right.
All right. Very cool. That's dope, man. I love it. Okay, so if someone's out there listening, like, you know what? I'm a Mac user. Yeah. This stuff sounds kind of cool. What's a good path to, like, you know, obviously go buy a machine you can run Windows on, but let's assume they have a machine. Yeah. They can run Windows. They have to get the thing. Let's assume they can do all that bootable stuff. They've installed Windows for the first time. It's booted up. They've logged in. Take us from there.
What do you do? What you need to do is go open up command prompt to PowerShell. Just type in WSL space dash dash install. It'll start installing everything. Hit yes to elevate. You're probably going to have to restart, and then you'll get full access to Open2. And we actually pop up an out-of-box experience, or an Ubi, if you will, which gives an overview of all the different features that we have in WSL. So a lot of the things I talked about today, like GUI apps, ability to access files. We explain, hey, this is how that all works. You'll get that. And that has links to our documentation. So it all has a learn more link. And if you want to get playing around with it,
You can go to the terminal and just use it as you want. If you want to learn more, you can go right to the docs straight from there. So that's what I'd recommend. Okay. I missed that beautiful boot thing, whatever you're talking about. I missed that. You didn't get the Ubi? I don't think so. Okay, let me know. Filebug, github.com. Let's assume I did, and I can't do this. I was too excited just to play with the toy. I don't like the bother me before I go play thing, so I don't know if it's a bother me before I go play thing. You want a wizard, though. Yeah, I do want a wizard, but I want to get started, but I want to be able to recall it. So maybe make it more easily recalled. It does not. It does not. Like, remind me later, hey, there's still this cool walkthrough. Okay, I'll be the physical reminder for it. If you go to start...
and then type in WSL settings. There's a settings UI on how to control everything in WSL. There's that welcome to WSL, bottom left, and you can click it and check it out again. Craig is our own personal Ubi. Ubi, LLM, two things. You're all things to all of us. Very cool, Craig. Thank you so much for explaining that to us, man. I think it's so cool. I'm a fan. Awesome. I'm a fan. Thank you for having me. It was awesome.
Well, friends, it's all about faster builds. Teams with faster builds ship faster and win over the competition. It's just science. And I'm here with Kyle Galbraith, co-founder and CEO of Depot. OK, so Kyle, based on the premise that most teams want faster builds, that's probably a truth. If they're using CI providers, their stock configuration or GitHub actions, are they wrong? Are they not getting the fastest builds possible? I would take it a step further and say if you're using any CI provider with just the basic things that they give you, which is if you think about a CI provider.
It is, in essence, a lowest common denominator generic VM. And then you're left to your own devices to essentially configure that VM and configure your build pipeline, effectively pushing down to you, the developer, the responsibility of optimizing and making those builds fast, making them fast, making them secure, making them cost effective, like all pushed down to you. The problem with modern day CI providers is there's still a set of features, a set of capabilities that a CI provider could give a developer that makes their builds more performant out of the box, makes the builds more cost effective out of the box and more secure out of the box. I think a lot of folks adopt GitHub Actions for its ease of implementation and being close to where their source code already lives inside of GitHub. And they do care about build performance and they do put in the work to optimize those builds. But fundamentally, CI providers today don't prioritize performance. Performance is not a top level entity inside of generic CI providers. Yes. OK, friends, save your time, get faster builds with Depot, Docker builds, faster GitHub Action runners and distributed remote caching for Bazel, Go, Gradle, Turbo Repo and more.
Depot is on a mission to give you back your dev time and help you get faster build times with a one-line code change. Learn more at depot.dev. Get started with a seven-day free trial. No credit card required. Again, depot.dev. We also had the opportunity to sit down with Mads Torgesen, lead designer for the C-sharp programming language. Here's Mads. Mads, how was your last name pronounced? Torgesen. Torgesen. The most American way you can imagine. That's how I do it in America. How would you do it not in America? In Denmark, I'm Mess Torgesen. They just ignore the D altogether. They ignore the D and many other sounds. Mess. Mess? Yeah.
Like you made a mess? Almost. It's a little more of an A sound to it. Mess. Mess. So no D sound. No D sound. And then the last name was what? Oh, man. No Gs. The G's in there, but it's very faint. It's like a little W sound. You must be upset then. How long have you been? Everybody's calling you mad. 20 years. Everybody's calling you mad. You know, I'll take it. Yeah? Are you upset right now? No. I think Mads is one of the coolest names out there.
You know, just roll with it. It actually gives you extra leeway in life. I don't even know what you do here, but I love your name. I'm just kidding. I know what you do here. It works. And is your title a principal architect? Is that your title? Yeah. And you lead the C Sharp language? Yeah, I lead the language design. I lead the designer of C Sharp. Lead the designer. I just want to get it right. That's all. Yeah. Cool. That's a money title right there. Yeah, it's a good job. It's kind of nice. Yeah. What's it like being in your shoes?
A little tight, honestly, after three days. Three days on the conference floor. It's one of these good types, honestly. Love it, love it. All right, well, we're here with Mads Torgerson, the lead designer of C Sharp.
Anders Halsberg started it, right? He did. And then he handed it off to you. He handed it off to me. How long ago was that? About a decade, I want to say. Okay. I think TypeScript just had its 10-year anniversary. Yes. That was when. So TypeScript became his new thing and C Sharp became your new thing. Yeah. You know, we did C Sharp. It was already my thing to a degree. I worked with Anders for my first 10 years or so here. Then we were totally rebuilding the C Sharp compiler as an open source.
in C Sharp implementation, right, self-hosted. And so we were kind of asked to not do too much language design because people were busy re-implementing all the features we already had. And Anders and I went and did TypeScript with the JavaScript team. And then someone had to go back and that was me. So I came back to C Sharp and Anders was gone and I was in charge. How did you feel about that comeback moment? Daunting was the main emotion. I was like, whoa. Talking about what does it feel to be in my shoes, Anders left some pretty big ones. So it was fairly daunting to kind of take the helm there. But I had a lot of early
guidance also from Anders, who's still around, right? So kind of grew with it little by little. What are some of the things you found challenging and delightful early on? Like the initial hurdles you had to get over, then some of the ones were just like, you know what, this is really awesome to be in this position. Yeah. I mean, delightful is certainly like the collaboration when it works. We have a design team. It's a V team. It's people from all over, like mostly the developer division, but even other.
Outside of that, and even currently we have someone who's not even at Microsoft. We have a V team that designs C Sharp. And when that collaboration really rolls, that creativity there, and when you just get something right because everyone pitches in and you get a synergy effect, that is just awesome. And the people working on it are great. I think the main challenge for me originally was actually not so much technical, but more about when consensus wasn't there, about kind of...
having to be the leader, stepping up and saying, okay, guys, we're doing this, making progress when people disagree, handling those kinds of situations. As someone who's a little bit of a people pleaser like me, learning to kind of own the authority of being the lead designer. That took me some years, and that was a struggle for me. And when you do that, you end up owning the successes, but also the failures, right? True, yeah. How do you make those calls? How do you make a design decision, whether large or small, like, now we're going to go this way? How do you ultimately make that call? Well, I will do almost anything to avoid making a dictatorial call. It is technically in my power to do so, but I find that decisions that
have a lot of consensus, a lot of buy-in, where people might disagree with the outcome, but they agree with the process that led to it. Things were weighed, their points were adequately hurt, that kind of thing. Those decisions tend to end up usually being really good and to stick. You don't then get to the end of the production, shipping a month from now, and then you realize, oh, this was a crap decision or something like that. So taking the effort up front to have that maybe a little more laborious process of getting everyone bought in and thinking through all the options.
that does tend to lead to good decisions. So that's what I try to do. But sometimes, you know, there is time pressure. You've got to make a call. And I will do it, but I'm uncomfortable with it, to be honest. Because they're sort of like, what if I'm wrong, you know? Oh, sure. All those kind of doubts. So to give you my experience with C Sharp, it's probably 100 lines of code. I think I had a fintech customer that I needed to extend an endpoint on our server-side thing in order to build a front-end thing. And I went into there, and I had VS Code. Not VS Code. Visual Studio.
And I took an existing endpoint and I said, it's kind of like this but different. I took that over there and I compiled it around and everything was great. That's my experience. You probably have less than that. Zero lines of code. Take us to C Sharp Landia as visitors here and maybe characterize the language and we'll talk about where it's going. C Sharp has been on quite the journey in terms of where we see ourselves in the world. It started out as a Windows-only closed source, mainly for apps and a little bit of server stuff back when that was how you said that. And now it's open source cross-platform and general purpose used for vast numbers of things, not all of which Microsoft has a hand in, like gaming, for instance, with Unity and other platforms. It started out being...
some would say suspiciously similar to Java in some ways. It was sort of part of that same wave of object-oriented programming languages finally hitting the mainstream. It was always more... It was always a bigger language than Java. It would sort of start at the same high abstraction level, but it would reach down further. C Sharp would have structs and even unsafe code from the outset to have interop with C and with native code to have ways of having better performance than you would have when your only choice is objects and garbage collection like it was in Java. So that's kind of how we started out. In terms of the unsafe code, of course, it's still there. You can still do it. We've cleaned up our act a lot by filling out that kind of bottom abstraction layer of C Sharp with safer constructs that are more...
you don't have pointer arithmetic code so much anymore. But we still like very much, we are very focused on performance and being one of the most high performance garbage collected languages out there. And we are focused on pretty aggressive language evolution to keep the language as modern and fresh as we can. You know, as the state of the art of programming languages moves along, both in terms of kind of... syntactic lightness and ease and also just like the things we can do with them, we do our best to be part of that. Sometimes we follow, sometimes we lead, but we try not to fall behind even with 25 years of history to not become like a legacy language. We want to be a really good choice for your next project, not just one that you have to use because your company is all invested. So how do you personally track?
what's going on trend-wise? Do you look at other programming languages, burgeoning ones, ones that have interesting ideas, but they're niche, and do you think about where C Sharp can go from that great artist steal kind of direction? There's definitely a large element of that. Yeah, we do steal a lot. We do look at other programming languages, and if they have a nifty solution to something, yeah, we will totally steal it. Sometimes, like, we will...
We will take the time to make it a C-sharp feature, one that feels right for the language. We don't just say, oh, that looks nifty, and then grab it syntax and all. We tend to make it our own. You'll see a lot of features from functional programming have made it into C-sharp, and because they're coming into an object-oriented kind of core philosophy, they do tend to take quite a lot of transformation to become, to retain that usefulness that they have in their original environment, but to feel natural in the context of C-sharp. So what languages are you looking around at? Maybe even you get...
language envy because they don't have the constraints you have with the backwards and the huge install base, right? Everything like, oh, cool if we could do that. I mean, we look kind of all over the place. Take some of the popular languages today, like we will look. Actually, all the popular languages today seem to, most of them seem to have taken a thorough look at functional programming, even though there isn't a language you can say is a super popular functional programming language. There's stuff like Scala that is, you know, somewhat popular in industry use. We all kind of look at that. Then we, you know, newer languages that have burst onto the scene for various reasons, like Swift, for instance, we'll definitely look at.
for like they have some, they had really nifty things about patterns that we were inspired by. Look at something like Kotlin that they have a good flair for like handsome syntax. Sometimes we'll be inspired by that. Python is really big, especially with AI now, but also in general in terms of data processing and so on. The lack of strong typing in Python means that you can have some really elegant syntax sometimes for working with the big data, for instance. And so we were a strongly typed language, but we still look to Python for, like, what are the things that people find really convenient? And can we do a thing that doesn't sacrifice the strong typing and the kind of reliability of working in that environment while being as nifty, you know? So either features directly that we were kind of inspired.
by Python 4, like how they do indexing and ranges and so on. We stole a lot of that. Also, just the feel of it. It used to be that every collection type in C Sharp would kind of have its own syntax for how you would initialize, how you create a new one with some elements. And now we have collection expressions, which are a nice syntax that works across all the different collections, even your own. So we try to, yeah, we take a lot of that inspiration, but what we choose to take and not take, as well as many of our original ideas, it really comes from the need that we...
that we find in the developer community. We do the language design in the open as well in GitHub. We have a lot of community participation. We, of course, go to events like these. And so there's many ways that we just kind of keep tabs on what are the current C Sharp developers struggling with, what are the new C Sharp developers struggling with in terms of learning and getting into the language. And that's kind of what drives, that's where the motivation comes from and the set of problems we want to prioritize finding a solution for. And then sometimes the solution is, hey, let's steal it from Swift. And sometimes the solution is, hey, let's come up with something. One thing I appreciate about Swift is its ambitious scope.
even from the outset of being like from your single, from your one, you know, your command line scripting program all the way up to operating system level things in terms of like, it can do it all. And I wonder what C Sharp's vision is. I mean, are people using it for scripting and stuff or is it just not that kind of language or? They are. They are. There's even a scripting dialect of C Sharp. Okay. Although we're trying to kind of get just a regular C Sharp closer to that. C Sharp used to be like, as a member of that Java age.
club, it used to be fairly clunky in terms of syntax. Like, declaring a virtual method and overriding and all that kind of stuff. You know, it's a thing with a lot of keywords involved. You know, your program would be a main method that lives in a class. And so you have five lines of code. A lot of ceremony. Yeah, before you even have, before you even have, before you even printing Hello World. And a lot of that we cleaned up, which makes it more scripty in a way and feel. Like, we took away a lot of ceremony over the years. Made, you know, cleaner, briefer alternatives. Like, why do you have to have all this here? Whenever people run up against a lot of boilerplate, that's when we think, okay.
Is there a way that we could just clean this up? And that's definitely inspired by a newer wave of programming languages and more scripting-like languages that are just more straightforward. You just sit down and you write, you know, bright line, hello world, and there it is. That's your programming. Now you can do that in C Sharp as well. Very cool. What's some of the functional stuff that you've brought in over the years? So much. I want to say the first thing was generics, really. Like parametric polymorphism came in from functional languages to Java and C Sharp and other programming languages around the early 2000s, I guess. Lambda expression. We had a whole like...
a whole round of stealing. In C Sharp 3, when I first joined C Sharp almost 20 years ago, we had a very functionally inspired push for embracing querying as part of the programming language. We had a SQL-like syntax in C Sharp that boils down to using lambda expressions and code quoting and all kinds of things. I've seen some of that, and it's really cool. It is very cool. Since then, I think some of the very impactful stuff we've adopted is pattern matching. So C Sharp now has a very...
very expressive pattern language set of patterns for pattern matching and it's very well integrated into what was already in the language so that gives a whole new like essentially it gives you a toolbox to rival classic optic oriented style of lots of virtual methods when you're kind of coding from the outside you have like maybe still have a type hierarchy a bunch of different types but here pattern matching is just you know it gets very clunky if you don't have something like that and you want to have control structure that you can actually maintain and read. Right. What level does the pattern matching come in at the function declaration level? Can you pattern match parameters and have multiple functions that fire off depending on what's coming in? No, we don't have pattern matching. We already have function overloading, which many functional languages don't. And for better or worse, overloading is in the language.
it will probably be too, I don't know, never say never, but it might be too difficult to kind of also have a pattern matching approach to those overloads on top. But we do, at the statement and expression level, you know, we have, essentially we have match statements, which are just old switch expressions dressed up, and old switch statements dressed up, and we also have switch expressions, which are like the more functional expression-based way of doing it. Gotcha. Cool. Now what about pipelining? Is that a thing that isn't C-sharp? Not in the classic sense, but we were...
Back then, when we did the whole querying thing, we were very inspired by pipelining and functional programming languages. What we did instead is extension methods, which many other languages have picked up since then, where you... It's an example of kind of adapting something to a more object-oriented style. Essentially, you put a method on an existing type from the outside, right? And the nice thing with that from an object-oriented point of view is you walk up to a value of that type, you press dot, and these extra methods show up. So you have the discoverability of, like, what can I do now?
come not just from the members declared on the thing, but also that other people whose stuff you're importing put on there. So that's a really good architectural pattern, it turns out. And at the same time, you get that flow. You start with the value, and you're piping it through various, maybe query methods, for instance. You wear, you select, you do all those things in a fluent style, just like you would do with pipelining in a functional language. And now, almost two decades later, the next version of C Sharp will have not just extension methods, we will start adding extension properties and extension other kinds of member kinds to kind of capitalize more on the...
that composability, that extension method scale. How do you add all this stuff and then maintain backwards compatibility and performance? Sometimes it feels like backwards compatibility is, you spend half the time on that. How do you come up with a really good syntax that doesn't already mean something? It'll break something. We're fairly careful about breaking changes. We're probably getting a little more courageous as the years go by. But by and large, we don't obsolete things and we don't break things. That's sort of like a core principle. There's code that people are building and have been building for decades and if all of a sudden we start breaking all of that, not so good. So it is hard.
And I honestly would have thought we would run out of just design space long ago. But somehow we keep being able to get creative. Sometimes there's a little bit of compiler trickery involved to kind of make sure things can coexist. And we are... Essentially, we'd rather wait for the right thing than put something in that either breaks too much or doesn't have an optimal syntax. If you're like, we could have this beautiful syntax, but we can't because breaking changes, then we'd rather wait than put something inferior in. So we do try to keep, I think, successfully, keep the quality bar really high for new features, how they feel, how they look, how intuitive they are. And somehow we're still able to do it. But it's honestly a bit of a mystery to me. How big is the team? It's very hard to count.
I am the C Sharp language design team in terms of full-time work. There's a C Sharp language design V team that is about 10, 11 people that meet every week and where all the decisions are made. There's a compiler team of a little over a handful of people that built the understanding of the language. There are people on the tooling team that build things for VS and VS Code, have suggestions and refactorings and all of those things on top as well. There are people who are like, oh, there are these new features. Would you like me to turn your code into those?
Then there's the people building the .NET runtime that it all runs on and the libraries. And so when you start adding it up, I'm sure we'll get closer to 100, depending on how you count. So at the keynote on Monday, agentic was the word of the day. And I wonder sometimes how far into an ecosystem that kind of a trend permeates. And I imagine as it goes down, it eventually reaches languages. And I wonder, I mean, I don't know if that's true or not, so I kind of teed that up as like...
our new C-sharp language features considering some sort of tooling or AI-related things? Is that reaching itself in the language design, or is that just like, well, we can just ignore that stuff and then do it at a higher level? We certainly can't ignore it. That would be at our peril, right? So far, I think there's a little bit of a... I mean, certainly our tooling is just completely infused with AI already. You work with C Sharp in Visual Studio, Visual Studio Code, copilot is all over the place, and being very helpful, more and more so. That's a really rapid development. So certainly there, of course. Then there's sort of a couple of other questions we have to take into account for the language design itself. One is...
I think a little bit of a red herring, which came up sort of in the beginning of LLMs bursting on the broad market, is like, should languages be designed for... for AIs to be able to better train or better predict or something like that? Like, is there something about programming languages that make them harder or easier for AIs to work with? Yes. That, I think, is largely... I think we're already kind of past that. I think that's just as the models get bigger, they can figure it out. The models can work in whichever programming language you throw at them. The main thing they rely on is there being vast code bases out there to learn from. Samples and documentation, right? Yeah. So they're fine. But people did, like, a year ago at Build, that's the kind of question people would ask a lot. Nowadays, I think there's a little bit, as you build, like you mentioned Agentech, as you build architectures where...
You know, agents talk to each other. Maybe you do that programmatically. You put agents together and so on. And there's an interesting question about how do you do the, that sort of form of, thinking of it as a form of distributed programming. What are good architectures for that and how do they influence the language? One thing that's come up is that C Sharp doesn't have any notion of union types in it. And those are actually kind of helpful for some of those architectures. Also sometimes for AIs to be like, I know it's either this or that. Like union types where it's either an end or strain, you know, that kind of thing. C Sharp doesn't really have a way to express that intent at the language level. It doesn't really matter what it is, but if we had.
then I think that would both help at the sort of architectural level and also that intent is evident not just to other programmers but also to AI reading and helping you maintain the code. So there's a little bit there with an expressiveness that we are now kind of... we're at the drawing board figuring out, okay, honestly, we've been thinking about union types for a while, haven't really had the killer scenarios to say, okay, we should go this way on them. There's this big design space. And I think this is the one that is kind of driving us to be like, okay, we should have union types in C Sharp, and we should get them in. Interesting. Yeah, get a wheel on. There you go. Yeah, that's interesting. It's like you have all these potential users and use cases, and you're weighing those against all the hurdles and potential drawbacks of a feature.
and it's like you're just adding a new set of potential users. It's like, well, we have our human users, and they've been asking for it, but it hasn't necessarily percolated up as being so important that we have to build it. And then we have these AI tools. These agents will be coding with it. And is this because they tend to use union types in other languages a lot? Yeah, sometimes you see that. Yeah, for instance, and it's not just programming languages. If you look at something like, just look at JSON. So much data is in JSON. And if you look at JSON schema, well, you can express a union type. And so since it's a big data exchange type,
A data exchange format, right? Being able to express that union type in the languages that consume it means you can have a more faithful mapping from the JSON to whatever's the native representation of it in the language. That's true even without AI being involved, but when AI is also involved in them, then there's that extra bit of, can we express that intent faithfully when it's present in the data? Yeah, it's a thing that I think will be a good fit in T-shirt, but it's definitely... It's both getting its priority boosted by the AI scenarios, and that also gives us another set of concrete scenarios to help drive the design. You don't want to design a language feature in a vacuum. You want to have people ready to use it so that you can use their designs to make the right decisions. Interesting.
This may bring us back to last year's conversation about the thing that you said people were probably talking about last year. One thing that we're seeing and other people are seeing is in the world of, I guess it's sort of in the vibe coding world, but and beyond. Imagine vibe coding a few years from now, not right now. The tools that people are using are making a lot of the choices for them. And we're seeing where software services now are actually being skyrocketed in their usage, not because a human decided to use them, but because a vibe code tool decided to use them. You know, insert your tool here. And so...
software as a service providers are starting to think like maybe we're actually optimizing for the wrong audience because it's a lot easier to convince one of these things and it's going to use us a thousand times especially as we get more and more distanced from the from the code itself right now we have to look at all the output but you assume that maybe at a certain point we look less and less and less and i don't care what services it's using maybe i don't care what programming language it's using underneath the hood either because i wonder if there's a world wherein The AI agents are actually making programming language choice, just like a project manager might say, we're going to use C Sharp for this. Have you considered anything like that? I don't know if that necessarily drives design, but it's just an interesting phenomenon that might happen. It is interesting. You make a really good point. It's almost like search engine optimization. It is, yeah. You want to try to look sexy, too. You want to just poke up above the rest so that all the AIs will pick you. And it's a huge multiplier if you can get them to do that. So you're sort of competing for their attention, if you will. That's a really interesting situation.
From a design point of view, I think that it's probably more of a how much code is already there situation in that language. It will start out by what do people use when they do this. That's because ultimately the models we have now are informed by what people have done. But as there's more and more code that's actually bi-coded, there will be these self-sustaining, self-reinforcing loops maybe. Yeah, it might start to eat its own tail.
And that's been one of the concerns with generative AI in general, is the more that it generates, the more that you're now consuming your own generated content, just like the movie Multiplicity. You know, he got dumber and dumber and dumber every time he multiplied himself. Right. There's definitely a risk there. And I think when you think about...
the role programming languages play there, they're sort of like AI is non-deterministic, right? Programming languages, programming is where determinism comes in again. Like that's like, so when you, I mean, many, this is true. I mean, people say that instead of asking AI to solve your problem, ask it to write a program to solve your problem because then that program is deterministic and you can like, it has predictable behavior. It gets the math right each time. Yeah. So really programming languages to some degree are the other side of the coin. That's true. Or they're the face of that other side of the coin, if you will. Like they're the face of the programming, that the deterministic factor. And I think a lot of,
how software is going to develop is in the, how the interaction works between the LLM. What's the division of labor? How dynamic can that be? And how good can we get at using the right thing for the right job? Like, okay, now I need an AI because I need that kind of open world thinking. I need to understand and get a grip on something that is big or nebulous or whatever. AI for that. Now I need something that runs a million times a day and that is trusted and serviceable and so on. That's a program.
But the AI might have helped write the program, and the program might have helped inform the AIs. So that interaction is really sort of like a very interesting field to watch those couple years into the future, as you say. Yes. And where those themes are, specifically. Yeah. I think that's going to evolve a ton over the next couple years. So as a programming language designer, maybe you're thinking, well, how can I be the best tool to do the programmatic side of this LM interaction, maybe? Well, maybe not. I mean, you've got a huge programming language already. I honestly think we have a fine tool for that. Like, at the language level. Yeah.
You can do all the things. We're good. Yeah, I mean, an interesting thing, some people say eventually the AIs won't even produce high-level programs. They'll just generate machine code, because why not let them do all the stops? But I actually think the high-level programming languages are super useful for the AIs to do the right thing, because there's so much intent expressed in high-level programming languages. The kind of expressiveness, I think, really helps the AI kind of discern what's going on.
So I think high-level programming languages are here to stay. And the interaction between natural language and high-level programming languages, I think it's very, I believe, really helps. AIs train well, get good at stuff. That's my belief. Do you think there's a higher level that isn't quite plain prose or English or whatever your language is, but's higher than your current highest level languages, where it's almost like pseudocode with slightly more formalized? That would be like a new language, perhaps, or a layer on top of C sharp. I don't know what it is. That's like, actually, this is optimal. This is the balance between what the machine needs and what the human actually wants to write. Or do we just go straight to English and just let them figure it out? Well, the thing about...
Programming languages right now is that, I mean, they're deterministic in English as not. They have clear semantics in English as not. That doesn't mean that they're as high level as they can be. Like, certainly a lot of the evolution of C Sharp over these past 20 years has been about... having a more declarative and less imperative way to express things. You express your intent rather than what you want rather than how to do it. And by no means do I think that evolution has stopped. We'll keep finding better ways to say less and get the right thing while still deterministic. So in that sense, yes. And I think that will be actually fine with the AIs. They'll be like, awesome. They just told me what they're trying to achieve. I don't have to look at their for loop and they're like, I get what they're trying to do because they're telling me directly. I don't have to infer it. I don't have to say, is it this or is it that? So expression of intent.
The more code kind of captures that, the better a bridge it is, the better it is for both humans and AIs. Right. So imagine something like that coming out of Microsoft. Would that be like a Skunk Works project that some engineer just does on their own and then pitches it to somebody? Or would that be like a thing where, I don't know who your boss is, but your boss comes and says, or somebody comes to Anders and is like, hey Anders, we want this new language. How would that even come out of Microsoft? I think we had never expected C Sharp to last this long and still be rocking. It's still so in its prime. It's still growing and still.
So if you'd asked me a few years after I joined, I would say, yeah, C-Sharp will have. Maybe, if you're lucky, it has a decade of cool growth, and then it's like a legacy. But I think it's not so much that another language will come in that's inherently higher level. I think it is that the languages will continue the race that we were already in before AI became a factor to raise the level of abstraction, push it upwards, become more powerful and expressive. maybe AI's can help us do that. But I think, I believe it's more likely to have an incremental process with the existing languages than it is for some language to burst on the scene that is like, oh, it's so high level. The AI's are going to love it even though there's no code yet for them to train on. People are going to love it even though they have all this install base of stuff. That just seems unlikely to me, but never say never. But it's much more likely that it comes from organic growth and just incremental improvement and raising the level of abstraction.
I would tend to agree. I think that that's perhaps, I don't know if it's a shame, but it seems that it's probably harder than ever to start a programming language. I think so. For that reason. Yeah. And interesting ideas come a lot from a fresh start. Yeah. Because you can't, you know, you have to have a new viewpoint perhaps or a new set of primitives or a new mission. I'm going to start with this in mind. Yeah. And start with just blank slate versus being like, yeah, but we have, you know, hundreds of thousands of people using it this way. Right. And if that language can't get a foothold, then how does it get, how does it even influence languages like C Sharp to be like, oh, let's think about this differently. Yeah. Even, like, if you look at.
The top 10 programming language by usage, whichever ranking system you want to look at. You look at the last 10 years versus the previous 10 years versus the previous 10 years before that. The churn in the top 10 becomes less and less. So there's already been these effects in place. Just because there's so much software. Network effects. Network effects or something like that. It's harder and harder to break into the programming language market. You need to be connected to some new value prop, as you said. You look at a language like Go, it had its connection to Kubernetes and that whole world of containers.
That really was the new novel scenario that you could piggyback onto the stage. That's kind of how you can break in. It's not on its own qualities, though they are probably involved in why it was used for those things. It's really that you managed to piggyback something. We talked about Swift before. It was Apple's anointed replacement of Objective-C. That helps. So they have a whole ecosystem just waiting for them. They just need to make sure that they can transition them with the carrot and the stick until they got them. That seems to be the only way things are really making it in nowadays in terms of programming.
And it's probably just getting worse and worse. Just because it's not no longer just the installed base, it's also what the AI is trained on. Yeah, exactly. So, yeah, it's really, it's a shame in a way. I love new programming languages and new programming ideas. Yes. But I am not super optimistic about having revolutions in that space, to be honest. Well, what are you optimistic about?
What am I optimistic about? Nice transition. Thank you. Nice transition. You know, I am optimistic about many things in my life. If we want to keep it programming language oriented. Take it wherever you want. There is a lot of innovation in the space. It's just that it's going into niches or existing programming languages rather than new languages all the time. Sure. That innovation keeps exciting me, and I think it keeps solving new problems. I think, obviously, for all the worry that people have about AI, I think it's going to... I'm sure there are going to be problems we haven't even thought of yet that we're going to have to deal with as it...
makes more and more of an impact on how software is built. There'll be headlines that are, hey, I did this, or hey, I did that, and bad things happen. But by and large, when we find that balance we talked about before, or as we get to it and maintain it through all the twists and turns that we'll have, I think the world is going to have really, really good software. I'm optimistic about that. Take us outside the world of programming. What else are you optimistic about? What else are you into? What interests you?
Well? As a person? Yeah. I have four kids. Okay. They're all in their 20s now. Nice. So my life, the last nearly 30 years, outside of work, has been a lot about having a family, doing things, traveling. We're both in the trenches currently. We don't have any kids in their 20s. We both have kids. Yeah. Speak for yourself. Oh, that's true. So I'm fairly new as an empty nester with my wife. Looking forward to grandkids? Looking forward, definitely. Yeah. I love the idea of being a granddad.
I'm also very supportive of my kids taking their time. Those are big decisions. I know we rushed into them a little when we were young. But obviously, that'll be great. Four kids is not one too many. I've loved being a parent for all this time. But it is kind of an interesting turning point in my life and in our life to be like, okay, what's the day-to-day? What can we now do? Right. The empty nest. The empty nest. What are you finding? Well, for starters, we are going to travel a lot. We both have the opportunity to take some extra time off in the fall, and we're going to spend a couple months in Europe.
We're both from Europe originally, don't get to go there a lot, and it's rushed when we do. Just go spend a bunch of time. I think travel is going to be fairly big. Yeah. That sounds amazing. We still have, our youngest is seven, oldest is 17. So we're in the range where we're starting to get some freedoms back. You know, no diapers, no naps. It's easier to go places as a family. One can babysit the other, that kind of thing. That's huge, actually. Being able to go out on a date without having to arrange a babysitter was like a threshold moment for us. Getting dates back, I remember that as like a revelation. You forget what you missed. Oh, my God. It's such a guilty pleasure almost. You're like, wow, should we like? Yeah.
Should we actually just go shopping on our date just because we can do it without the kids? Right. Yeah, that was a big moment for us. But still traveling with the family. Yes. Harder to travel, you know, just us two. Yeah. We still travel a lot with the family. It's hard with both. Yeah. Hard to travel with and hard to travel without. Yeah. Exactly. Yeah, both are challenges. Yeah. They're uniquely challenging. Like, one, you miss them. And then you're like, I want to miss you. You got to get away. No comment. I love my children so much. Sometimes you have to get away to miss them. It's just hard to.
Keep in mind that you are a full person. I'm learning to be a patient dad, too. So this is also a learning moment for me to be more patient. Oh, sure. Yeah. It's so hard. It is really hard. It's just emotionally straining. Being a dad is hard. That's my phrase to him. Anytime I mess up or like I got to go back and say, you know what? That wasn't too good there. Yeah. You know, because you got to show kids that you're sorry. You can mess up. I was like, being a dad is hard, buddy. It is. You know, it's so complex and so nuanced that you just can't share what you've got to do as a dad to your son who's nine. He can get some of it, you know? Yeah.
Yeah, and of course you don't want to make it their problem. Yes. But I think being put in those situations, like stressful. Well, if not, he judges you. He will judge you. Absolutely, yeah. He'll make his own judgments. If you don't share that moment with him, you know, and share the perspectives of why things are the way they are, how they worked out, the way they worked out, whatever the scenario might be. It's important to be. If you have that grounding in a relationship, I feel like that's better than like assuming, you know, like you've figured out on your own kid. You have to find a way to be vulnerable and sharing and being a person. Yeah. Otherwise, you know, you kind of. You shape them. Yeah, yeah, you do. But I mean, somehow I find coming out on the other side after.
28 years of having kids at home. I've learned so much. I feel like I understand so many things so much better and I have so many interpersonal skills and so much more empathy. that I think is, you know, I can attribute to the learning that all those hard moments and tough situations kind of accumulate. Probably make you a better design lead of a language, even. That's quite possible. I'll let others, you know, weigh in on that. Personally, I think I'm awesome, but, you know. Somebody else will ask around. Well, I thought that when I was young as well. I just wasn't right about it. Well, as part of this interview, we have to have three references. That's right. So we can go and talk to them afterwards. How awesome is he? That's right. Three references to other people? He's just messing around with you. Is he? Okay.
I was totally ready. He's like, okay. Totally. I'll give you names as long as you leave me alone. Do you have any letters of recommendation you can provide? No, this has been fun. Very interesting stuff. Thanks for sharing with us. Great pleasure. Hope you keep having fun of Build. Always. Love Build.
Okay, that's Changelog for this week. Thanks for hanging with us at Build. Changelog++ members, stick around for a bonus segment with Adam and Craig talking about building custom PCs. Changelog++, it's better. We do have one more interview from the event coming out next week. It's Amanda Silver, Corporate Vice President for Microsoft's Developer Division. That's a good one. Also, we have some big news coming this week about our live in-person Kaizen slash Pipely launch show in Denver. It is happening. All the details and tickets go on sale next week. Thanks once again to our partners at Fly.io and to our sponsors of this episode, Heroku.com and Depot.dev.
Thanks also to Breakmaster Cylinder for these dope beats. Next week on The Changelog, news on Monday, Amanda Silver on Wednesday, and Ab and I discuss the news on Friday. Have a great weekend, share The Changelog with your friends to help out the show, and let's talk again real soon.