Changelog & Friends — Episode 124
wsl.exe -- cat hello.cs
Microsoft brings WSL (Windows Subsystem for Linux) to open source with Craig Loewen, while Mads Torgersen discusses leading C# language design. The episode covers running Linux workflows on Windows, file system integration, and modern language evolution.
- Speakers
- Jerod Santo, Craig Loewen, Mads Torgersen
- Duration
Transcript(341 segments)
Welcome to Changelog 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?
So the FER 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,
open telemetry, 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 open telemetry metrics. But now there's like a real standard. There's like a real toolkit and there's a whole ecosystem around Otell. And so being able to have open telemetry dashboards out of the box at 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 effect. Similarly, cloud data 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 to the C&B project itself. Bloomberg actually contributed support for software bill of 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 get to play into that ecosystem effect. A huge part of Heroku's value has always been the elements 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 our 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, lets me 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 parody on some of the more nuanced features that we have on cedar, on fur, but also the new things that we could build taking advantage of AWS VPC endpoints,
which is something that Salesforce customers have 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 changelog podcast and get excited about what's to come for Heroku. Once again, Heroku.com slash changelog podcast.
We're taking you back to Microsoft Build 2025. Next up, we sit down with Craig Loewen 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, okay. Are you the one? I'm the one. I thought the winner.
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 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 sourced 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 sourced these days is the WSL1 implementation. Which is old, right? Old and busted. Yeah, 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 band 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. Well 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 of 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 like a really cool thing I think. And I feel like WSL is gonna 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 on the icon and I wait and I wait and I wait and I wait and then it's up. And like the experience on a 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 Powertoys 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 at 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 wanna 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 task bar 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 like 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 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. Oh like a. Make it a little bit more like hands-on guided tour versus figure it out. Which is kind of like that set of answers. Like they 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 title scripts, I forget what it's, I think it's called title 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 and I don't even know how to qualify that but bringing that in house. Like you have a massive amount of developers just make it easier for developers to use your machine. Yeah.
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 WinGet and you might've seen the Windows package manager being able to WinGet install, you know, I can install things directly through that. Yeah. 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 like, oh, is this gonna mess anything up or change it because it's not, it checks the, 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.
Huh.
Yeah, there's a lot of cool things happening there and that's like, it goes back to almost like that, I mentioned to Jared and other shows and obviously he and I podcast and you're the newbie here, right? To this scenario here. No offense. No offense but I've told him before, I ran a podcast, 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 were, you all were kind of like making the seemingly good choices to come, to have this comeback so to speak because in my eyes, you were less cool and everything Mac was super cool, 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 but it was around 12 years ago because of something you all did, I'm like, they're gonna be coming back, they're gonna 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 like, there's such cool stuff in there so WSL is a big part of that. So tell me about the cool things you could do with WSL and absolutely WSL 2.
So the primary use case for the Windows services 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 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 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 wanna build a website, I wanna train an AI model 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, 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 kinda 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 okay what distro is the user loading? So the user's saying like I'm loading Ubuntu and we say okay, 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 the standard in and out and 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 gonna stay running so some calls are all, I mean 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 the 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, so I close all my terminal windows, oh 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. Yeah, 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 gotta 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. Can run full 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 and unless you've already built it, then it would not be an idea. That's all right shit. Right. And so I'm a fan of Proxmox. Okay. Are you a fan of Proxmox? Do you understand Proxmox? 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. Right. When will or is it on the roadmap to make WSL like that? Because I love it because I can run one single machine and all my Linuxes and then marrying this with this potentially like, hey Adam is no longer a Mac user, not as a Windows user, but I also want to command an army of Linux, you know? Are you wanting to run? But there's even IP addresses. Like Hyper-V 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 versus
Well, one might be running PyHaul, for example. Got it. One might be running Plex. Yeah. That machine will have a mount automatically mounted on boot from my NAS, which is a whole separate machine. That's running TrueNAS. And so that's a dedicated, you know, NAS plans for the whole network, right? Everything can store things there. You know, 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? So here's my, I'm not a Windows user, so I don't know what 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 and the kind of, I think this is a great question of, 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. It is a question. As if that was the question because I knew what I wanted
but I didn't know existed, you know, 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 gonna give you a lot more of that fine grain detail control, right? You're wanting, I want multiple VMs. I want to control exactly what mounts. I want to control exactly the networking, you know, behavior, NAT versus something else, et cetera. Having that level of fine grain control over the virtual machines totally is a Hyper-V scenario. Okay. And for the scenario described, I think Hyper-V would meet those needs. And 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, you know, 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 set up. 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. So 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. Oh, okay, great. So you'll be totally set up. Yes. Yeah, so you can just go to turn Windows features on or off, enabled 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.
Okay. What is it like to do like PCIe pass-through? Can you do things like that? Like how complex can you make these VMs?
There's a lot more ability to make those complex. And so specifically, since I'm the product manager for WSL,
Hyper-V is a much broader set of capability. And so it's for advanced things like PCI Express, best to go get statements from the Hyper-V team can give something more accurate than that.
Well, you know there's GPU pass-through because you're using it. Right. So PCIe.
Gotcha. So probably some sort of interface to manage those things. I was curious about that because 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 skunk works of a true NAS install or an unrated install or whatever it might be. And so my lure to Windows, or at this point, is that WSL being there and then obviously Hyper-V enabled these cool things while also running a very cool operating system alongside of it. Like 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 used 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. Like 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 for 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, pharaonics.com. They're a third party website, not directly affiliated with Microsoft. And they do, they write articles about, hey, they compare on the same hardware, what's the performance for the Windows subsystem 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 could improve. In general, it's about a 5% virtualization tax, five to 10%, and 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. You know, there are speeds, there are scenarios where that works, and there's also scenarios where we're gonna be slower, especially around things like heavy IO is an area where we want to perhaps see some speed improvements. And so that is probably one of the areas that we wanna 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. Yeah.
So y'all have 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, maybe?
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.
It's a litigator. It's inconsequential. 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. Ever since. We didn't talk about it. Yeah, we used it as our public facing, let's interact with the community.
Okay, but the code wasn't there.
Yes, exactly. So no code was available there, but it was, hey, are you having an issue? Gotcha. I was on the WSL team would take a look and communicate with the 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 created a direct path. Like if you've got WSL thoughts, come say hi.
Yeah, exactly. And we take a look. That's kind of cool.
Even though it wasn't open source, we 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, okay, 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 gonna take this idea and do it ourselves or we're gonna merge this in and give you credit. Or we're gonna ignore this because 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 have their 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.
No. You know what I'm saying?
He's got a thumb on this pulse.
Oh my gosh, I love it, continue. I'm sorry, that was the cut guard.
I was just thinking about what are the kind of things that people are requesting or maybe even hitting up against? Towards that mission, 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? And 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?
Let's say those are my kind of top of mind.
Gotcha. And here's an example from what he's saying here too. So an example of speeding up the file system is I'm just on Windows, Jared. I open up with this terminal. I think it's called PowerShell, right? Right. 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 will 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 gonna 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 Ubuntu image. And then I would rsync it over to the NAS on a Windows machine. That's bad-ass. I mean, that's awesome, dude. Does that not like get you excited?
I mean, it's cool.
I mean, isn't that cool?
It is cool.
That's dope.
I think so too.
All right. They've embraced Linux that well to enable, I mean, it's fast. It's so fast. Teach me about the file mappings, how you're actually accomplishing that. The backslashes.
Oh yes, yeah.
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 and 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. Bye, Matt Ryer. I don't even mind bash. I like caching and cache 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, just say. Don't say, just say. Just say slash. No need to say the forward bit. Don't say, just say.
Do de do, do de do. Are you a forward slash only? I'm a forward slash purest.
And I'm wondering, I was gonna bring this up with the advanced settings. I was like, this could be an advanced setting. 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.exe, I'm dropped into Ubuntu. Where am I in my file system?
So you start in your Linux file system. Right, so I'm like at the root or in my home drive or whatever.
You're a home drive, right? So if you do pwd, you're like at home slash Craig would be mine.
If I'm in yours, it's weird, man.
This is not my directory. Yeah, why is the name wrong? 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 Jared when he, 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 nine, 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, you know, 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. And so.
So if I launch notepad.exe and I go file open.
Yep.
Is that how it works?
Yes. I don't know. Yes. Sounds right. I can confirm that.
Sure, yes, yes. He's an expert.
Yes, I'm still, I'm still learning. So I'm, I don't know.
How would I navigate to like 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, you know, on the left side of file Explorer, there's all that quick access menu ribbon for like 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 when it's running?
They do exist when WSL is not running, but the folder 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. Like it's, 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 back slashes, folks who prefer front slashes. I keep saying this. You can use either or, right? And you know, even.
Some would 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 other, I'm a VS code fan and I love VIM. So I have VIM like bindings and 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. Yeah.
Okay.
I mean, it really is cool.
And you can run the same thing inside of Linux, like VS code on Linux, right?
Yes, yes.
But it's just more native, I guess, with windows.
Totally. And even if I'm, cause I'm pulling up stuff on windows projects as well. All my extensions are saved. All my settings are saved across it. So it's.
Now 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 got to have your code, co-pile it up in there.
Yeah, that's right.
All right. Very cool.
It's dope, man. I love it. Okay, so if someone's out there listening, they're 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. They can run windows. They have to get the thing. Let's assume they could 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.
Like what do you do? What you need to do is go open up command prompt or PowerShell, just type in WSL space dash dash install.
It'll start installing everything. You hit yes to elevate. You're probably going to have to restart and then you will get full access to Ubuntu. And we actually pop up a 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 like 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 and go right to the doc straight from there. So that's what I'd recommend.
Okay. I missed that beautiful boot thing, whatever you're talking about there. I missed that. You didn't get the Ubi?
You didn't get the Ubi? I don't think so.
Okay, let me know. File a bug. GitHub.com slash Microsoft. Let's assume I did.
And I can't do that because I was too excited just to play with a toy. Yeah. 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 be easily recalled. It's in the help menu.
It is not.
It is in the help menu. Yeah, 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.
Yeah. Ubi, LLM, few 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. 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. Okay. So Kyle, based on the premise that most teams want faster builds, that's probably a truth. If they're using CI provider for 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 built 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, okay 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 Torgason, lead designer for the C Sharp programming language. Here's Mads. Mads, how was your last name pronounced?
Torgason.
Torgason.
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 Mads Torgason.
They just ignore the D all together.
They ignore the D and many other sounds. Mads.
Mads?
Yeah.
Like you made a mess? Like a mess hall.
Almost, it's a little more of an A sound to it, but it's very close. Mads. Mads.
So no D sound? No D sound. And then the last name was what?
Torgason. No Gs. The G is in there, but it's very faint. It's like a little W sound. Torgason. Torgason.
You must be upset then.
How long have you been here and people say it wrong? 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. I actually give you extra leeway in life.
I don't 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 Principal Architect? Is that your title? And you lead the C sharp language?
Yeah, I lead the language design. I'm the lead designer of C sharp.
Lead 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 on the conference
floor.
It's one of these good types, honestly, Mr. Literal. Love it.
Love it. All right, well, we're here with Mads Torgason and the lead designer of C sharp. Anders Haldberg 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. OK. I think TypeScript just had its 10 year anniversary. 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, 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. 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. He was still around. So I 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 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 that 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, OK, guys, we're doing this, making progress and people disagree, handling those kinds of situations. As someone who's a little bit of a people pleaser like me, they're 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, like 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 like 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, and that does tend to lead to good decisions. So that's what I try to do, but sometimes 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 needed, 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 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, it was great. That's my experience, you probably have less than that.
Zero lines of code.
Take us to C Sharp Landia, you know, as visitors here, and maybe characterize the language and we'll talk about kind of where it's going.
Yeah, I mean, 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, you know, how you set 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 reach, 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, like, interrupt with C and with native code to have, you know, ways of having better performance than you would have when you, your only choice is objects and garbage collection like it was in Java. So that's kind of how we started out. And we've, 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, you know, more, you don't have pointer arithmetic in your code so much anymore.
Less sharp edges down, yeah.
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.
Right. So, how do you personally track what's going on trend-wise? Like, 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, you know, 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 take the time to make it a C-Sharp feature, one that feels right for the language. Like, we don't just say, oh, that looks nifty, and then grab its syntax and all. Sure. We tend to make it our own. Like, 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, like, 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 compare, and the huge install base, right, you're everything like, oh, you're cool if we could do that.
I mean, we look kind of all over the place. You 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, but 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 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 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 for, like, how they do indexing and ranges and so on, we stole a lot of that. Also just the feel of it, like, we have, 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 where we, 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 are, we do the language design in the open as well on GitHub. We have a lot of community participation. We of course go to events like these, and so the 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, 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 and you know, you would, your program would be a main method that lives in a class. And you know, you have five lines of code. 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, we took away a lot of ceremony over the years, made, you know, cleaner, briefer alternatives. It's like, why do you have to have all this here? Whenever people's, whenever people run up against a lot of boiler plate, 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 like 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 program, right? So now you can do that in C-sharp as well.
Very cool. What's some of the functional stuff that you 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 round of stealing. We did in C-sharp three, when I first joined C-sharp almost 20 years ago, we had a very functionally inspired push for like 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. Yeah, I've seen some of that.
That's really cool.
It is very cool. Yeah. 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 optical 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. 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 and so on.
Right. What level does the pattern matching come in? Like at the function declaration level, like 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 at the, we already have function overloading, which many functional languages don't. And for better or worse, you know, overloading is in the language. And so 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 switch statements dressed up. And we also have switch expressions, which are like the more functional expression based way of doing it.
Gotcha. Cool. And 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 in 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. You put, 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, right? 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 really good, that's a really good architectural pattern, it turns out. And at the same time, you get that flow, like you start with a value, and you're piping it through various, maybe query methods, for instance, that's kind of, you know, 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, like 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 methods.
Gotcha. How do you add all this stuff, and then maintain backwards compatibility and performance?
Sometimes it feels like backwards compatibility is, like you spend half the time on that. How do you come up with a really good syntax that doesn't already mean something? Doesn't break everything. Yeah, or break something.
Yes.
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, because, you know, there's code that people are building, and have been building for decades, and if we 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, like, 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.
It's fair. How big is the team?
It's very hard to count. Like, I am the C-Sharp language design team in terms of like 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 the people who are like, oh, there are these new features. Would you like me to turn your code into those? Then there are 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 kind of teeing that up is like, are 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, there's certainly our tooling is just completely infused with AI already. You work with C-Sharp in Visual Studio, Visual Studio Code, co-pilot 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, but it came up sort of in the beginning of LLMs bursting on the broad market is, should languages be designed 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? 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, would 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 Agentic, as you build architectures where 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 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 int or a string, you know, that kind of thing. C-Sharp doesn't really have a way to express that intent
at the language level.
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 help 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, and honestly we've been thinking about union types for a while, haven't really had like the killer scenarios to say, okay, we should go this way on them. There are many, just 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 wiggle 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 the potential drawbacks of a feature. And it's like you're just adding in 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 they tend, is this because they tend to use union types in other languages a lot or?
Yeah, sometimes you see that. 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 format, 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 the whatever's the native representation of it in the language. That's true even without AI being involved, but when AI is also involved 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 C-Sharp but it's definitely, it's both getting its priority boosted by the AI scenarios. And it's also, 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 then it's going to use us a thousand times, especially as we get more and more distanced 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. And so I wonder if there's a world wherein the AI agents are actually making programming language choice, just like a project manager might say, well, we're going to use C-sharp for this. Have you considered anything like that or does that, I don't know if that necessarily drives design, but it's just an interesting phenomenon that might happen.
It is interesting. It's a really, you make a really good point that there's sort of a, there's an, it's like, it's almost like search engine optimization. It is, yeah. You want to try to look sexy to, you want to kind of, you know, just poke up above the rest, you know, so that all the AIs will pick you. And it's a huge multiplier if you can get it to do that. So you're sort of competing for their attention, if you will. That's a really interesting situation. I think I do, yeah, 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, rather than like what, 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, right? But as there's more and more code that's actually vibe coded, right, there will be these self-sustaining, self-reinforcing loops, maybe where
yeah, it might start to eat its own tail. And that's been 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, yeah, 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, many 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 having the, 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 AI's, you know, they, 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 seams are specifically.
Yeah, I think that's gonna 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 LLM interaction maybe? Or maybe not, you've got, I mean, you've got a huge programming language already.
I honestly think, I think we have a fine tool for that. Like at the language level, we're good. Yeah, I mean, the, an interesting thing, like some people say like eventually, you know, the AI's will just, they won't even produce high level programs, they will just generate machine code because why not let them do all the stops? But I think the, I actually think the high level programming language are super useful for the AI's to do the right thing because there's so much intent expressed in a high level programming language. The kind of expressiveness I think really helps drive, like it helps drive, it helps the AI kind of discern what's going on, right? So I think high level programming languages are here to stay and they're kind of interact, the interaction between natural language and high level programming languages. I think it's very, I believe really helps AI's 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, you know, your language is, but it's higher than, you know, your current highest level languages where it's almost like pseudo code 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 and English is not, they have clear semantics and English does not. Right. 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, like you express your intent rather than, like what you want rather than how to do it, and by no means do I think that evolution has stopped, like we'll keep finding better ways to say less and get the right thing. Right. 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, you know, 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, would that to be like a skunkworks project that some engineer just does on their own and then pitches it to somebody and then, or that'd be like a thing where, I don't know who your boss is, Mads, but like your boss comes and says, or, you know, somebody comes to Anders and like, hey, Anders, we want this new language. Like, how would that even come out of Microsoft?
I think, you know, we had never expected C Sharp to last this long and still be like rocking. Yeah. It's still so in its prime, right? Still growing and still, and so if you'd asked me like a few years after I joined, I would say, yeah, C Sharp will have, maybe if we were lucky, it has a decade of like cool growth and then it's like a legacy. Legacy. But I think, so 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 as can help us do that. But I think, I believe it's more likely to happen as 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 gonna love it, even though there's no code yet for them to train on. People are gonna love it, even though they have all this install base of stuff. That just seems unlikely to me, but you know, never say never, but it's much more likely that it comes from like organic growth and just incremental improvement and raising the level of abstraction.
Yeah. 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. You know, and there's an 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 gonna 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 like, oh, let's think about this differently.
Yeah. Even like if you look at the top 10 programming language by usage, whichever, whichever ranking system you wanna 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 where just because there's so much software.
Network effects.
And network effects. So something like that, it's harder and harder to break into the programming language market. You need to really like, you need to be connected to some new value prop, as you said. Like you, you look at a language like Go, it had its connection to Kubernetes and that whole world of containers.
Right.
That really was the scenario, new novel scenario that you could piggyback onto the stage with. That's kind of how you can break in, right? Right. It's not on its own qualities, though they are probably involved in why it was used for those things. Sure. It's really that you managed to piggyback something. We talked about Swift before. It was Apple's anointed replacement of Objective-C. Right. And... 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 languages. And it's probably just getting worse and worse. Just because it's now no longer just the installed base, it's also what the AI's 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. 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 AI did this or AI did that and bad things happened. Sure. 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. That's my, 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, 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 in there. 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 that time. It's, those are big decisions. I know we rushed into them a little when we were young. Sure. 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 gonna spend a couple of 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 gonna 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, 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, 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, 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 at that age.
They're uniquely challenging. The one you miss them and the one you're like, I want to miss you. You got to get away. I love my children so much, but sometimes I'm like.
It's just hard to keep in mind that you are a full person when you have, when you're in the middle of it.
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.
I always tell my oldest, being a dad is hard. That's my phrase to him. Any time I mess up or like I got to go back and say, you know what, that wasn't too good there. Yeah. Because you got to show kids that you're sorry. And 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. But 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 would judge you. Absolutely, yeah.
He'll make his own judgments. If you don't share that moment with him, you know, and share their 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 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.
Oh, yeah.
Like I feel like I understand so many things so much better and I have so many interpersonal skills and so much more empathy and that I think is, you know, I can attribute to the learning that all those hard moments and tough situations kind of accumulate.
It's probably making you a better design lead of a language, Steven.
It's quite possible. I'll let others decide, you know, weigh in on that. I'm probably not the best. Personally, I think I'm awesome, but you know.
Well, somebody else may ask so much. We'll ask around.
Well, I thought that when I was young as well, I just wasn't right about it.
Well, it's part of this interview. It's part of this interview. We have to have three references. That's right. We can go and talk to them afterwards. How awesome is he?
That's right. Three references. Other people?
He's just messing around with you.
Is he?
OK, I was totally ready. He's like, OK, yeah, yeah, yeah.
Totally. I'll give you names as long as you leave me alone.
Do you have any letters of recommendation you can provide? Now, this has been fun. Very interesting stuff. Thanks for sharing with us.
Great pleasure. Hope you keep having fun at Build. Always love Build.
OK, 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 next 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 Adam 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.