The Changelog: Software Development, Open Source - wsl.exe -- cat hello.cs (Friends)
Episode Date: May 31, 2025We bring you back to Microsoft Build 2025 to nerd out with Craig Loewen on Windows Subsystem for Linux and Mads Torgersen on leading the design of C#....
Transcript
Discussion (0)
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, 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 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 O-Tel.
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 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 to 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 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 in 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,
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, on Fur,
but also the new things that we can build,
taking advantage of AWS VPC endpoints,
which is something that the 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 are taking you back to Microsoft Build 2025.
Next up we sit down with Craig Lowen 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.
Open sourcing of it.
I'm the one.
I thought it would hurt.
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.
We 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. Which is the old version. It's not open source these days is the WSL 1 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.
It does.
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 wsll-desh install to install the full thing.
Well, what that does is it installs an MSI from GitHub,
which does the wsll 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 Linux is of the world in concert with Windows and running R-Sync and H-TOP on just
different Linux commands in this Windows world is a really cool thing, I think.
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 that'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 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 of 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, what you call
it, a tui in PowerShell?
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 Titus 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 figured out, which is kind of like
that's an answer.
It's like, go check out the settings menu.
That's good, but it's not the guided tour.
For sure, like you're wanting a,
hey, let me run through this, 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,
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 I use whatever he suggests, and it's this Titus, he's well known out there on YouTube, we'll link in the show
notes, but I use whatever he suggests and it's this GUI that does that but it's third
party.
Not to say that it's bad or good, I don't even know how to qualify that, but bring that
in house.
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, win get 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, 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.
Right.
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 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 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 was it was around 12 years ago because of something y'all did
I'm like they're gonna be coming back something they're gonna start doing things cuz 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 it's 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
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 OSes 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 made 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?
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, okay, what distro is
the user loading?
So the user is 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 know, 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.
And basically do the finishing touches.
And then after that, we load that VM
and connect to 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.
And that's the first time you use it, obviously,
like after a reboot or whatever.
It's going to stay running.
So subsequent 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, 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
you know coloring and graphics.
You 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 OpenSE that have been there for a while. Mm-hmm. Here's a question slash idea and I'd say it's an idea if if it's a brand new thing and
Okay, unless you've already built it then it would not be an idea
Right. And so so I'm a fan of proxmox
Okay, are you finna proxmox? Do you understand proxmox? No it is. Okay, so proxmox is an
open-source hyper V OK, 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
in all my Linux's and then marrying
this with this potentially like, hey, Adam is no longer a Mac user, not even a Windows
user, but I also want to command an army of Linux, you know?
Are you wanting to run...
Potentially 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 multiple different virtual machines
running Linux?
Yeah.
And what would be the use case for it versus something
like this?
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.
You know, every one of 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 in 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 own.
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, 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, as if that was the question.
Great question!
I knew what I wanted, but I didn't know it existed.
You know, what's out there that does it? Exactly. As if that was the question. Great question! I knew what I wanted, but I didn't know it 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-grain detail control, right?
You're wanting 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-grain control
over the virtual machines totally is a Hyper-V scenario.
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 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 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 in 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 like 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 is one of the other differences.
I have Pro, I'm cool.
Oh, okay, great.
So you'll be totally set up.
Yeah, so you can just go to turn Windows features on or off,
enable to 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.
So specifically, since I'm the product manager for WSL,
Hyper-V is a much broader set of capabilities.
And so for advance things like PCI Express,
best to go get statements from the Hyper-V team
to give something more accurate than that.
But you know there's GPU pass, you're using it.
Right.
So PCI...
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, OK, 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
and sort of have a skunkworks of a true NAS install
or an unrated 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
you know operating system alongside of it.
I can have my cake and eat it too.
Totally and like 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, etc.
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 the 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 will ever be, the latency between? The latency between a Linux command on a Windows file system? What's the beans there?
Totally. There's actually a really cool website for Onyx.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 could improve.
In general, it's about a 5% virtualization tax, 5% 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.
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.
Yeah.
So you 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.
Continue, Jared.
Well, I'm just curious.
I mean, 23,000 stars, huge press, obviously.
1.1,000 issues open.
Interestingly, a lot of these seem like they were 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.
Yeah, we used it as our public facing,
let's interact with the community.
OK, 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 and 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.
And we take a look.
That's kind of cool. Even though it was an open source, you were come say hi. Yeah, exactly. And we take a look. 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, 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, and different?
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 it actually
doesn't align with Microsoft's vision, etc.
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 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, 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, you know,
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 thumb on this pulse. Oh my gosh, I love it. Continue. I'm sorry.
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 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, a lot of them are kind of feature
requests of things we'd like to see and it 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, I mean 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 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. Here's an example from 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 opened up with this terminal.
I think it's called PowerShell, right?
Right.
You open up PowerShell,
and you go into your Ubuntu,
which I always forget how to,
so I have to like 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, 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 Simabuntu image.
And then I would R-sync it over to the NAS
on a Windows machine.
That's badass.
I mean, that's awesome, dude.
Does that not get you excited?
I mean, it's cool.
I mean, isn't that cool?
It is cool. That's dope. I think 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
They've embraced Linux that well right 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
Yeah, play some nice long Jason play this Jason. There's a place I'm driving towards
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 is fine.
I'm even okay with a tilde. And back ticks? All good. But back slashes?
Get those dreadful characters out of my face before I slap someone.
And I'm looking at you PHP namespaces.
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 Backslash is the Worst.
It could be like Backslash, You Disgust Me.
I would just call it Backslash.
Bye, Matt Ryer. 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 gotta rash
Oh my gosh, man
I'm gonna smash your face in
If you backslash me, that's trash
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.
Just say slash.
Are you a forward slash?
I'm a forward slash purist.
God, I'm very sad.
And I'm wondering, I was going to bring this up
with the advanced settings, because 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.
So if I hit WSL.exe, I'm dropped in Dubu into, 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 or something.
Your home drive, right?
So if you do PWD, you're like at home slash Craig
would be mine. Sure.
And- If I'm in yours, it's weird, man.
This is not my directory.
Yeah, I was named 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 C, D, forward slash, your favorite.
OK.
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. favorite. OK. So your C directory is mounted in your slash mount. Exactly.
Gotcha.
And so you can go to mount C, then you can access your whole Windows files from there.
That's what you're doing with your R sync.
Right.
And you can have all of your Linux.
I nodded to the audience.
I nodded to Jared when he leaned over and asked me that question.
Continue Craig.
Thank you.
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 R-Sync, 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, 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. 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.
Sure, yes.
He's an expert.
Yes, I'm still learning, so I don't know.
How would I navigate to my Etsy directory in MacBunto
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.
Yeah, get on Craig's home drive. And at the bottom we've added a Linux logo when
Wcell 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 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 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 been our goal of we want
it to feel like one machine.
And there are folks who prefer backstashes,
folks who prefer front lashes. I keep saying this. You can use either or. 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?
Yeah, 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 the Linux editor from WSL. And I'm a VS Code fan, and I love Vim.
So I have Vim 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.
OK.
I mean, it really is cool.
I love 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.
So it's a...
Now why not just rock Vim directly?
You know, I like VS Code.
All right.
I like the Shift Control key command palette.
Sure.
Same stuff up.
You can have your GitHub Copilot up in there.
Yeah.
That's right.
All right.
Very cool.
It's dope, man.
I love it.
OK, 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.
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 will 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 an out of box experience, or an
OOB, 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.
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.
OK, 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 recalled.
It does not.
It's in the Help menu.
It's in the Help menu.
Yeah, like remind me later, hey, there's
still this cool walkthrough.
OK, 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.
Bam.
Craig is our own personal Ooby.
Yeah.
Ooby, LLM, a 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.
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. Okay.
So Kyle, based on the premise that most teams want faster builds,
that's probably a truth.
If they're using CI providers with 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 and a set of capabilities
that a CI provider could give a developer that makes their builds more performant out
of the box, makes their 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 depo.dev.
Get started with a seven day free trial.
No credit card required.
Again, depo.dev.
We also had the opportunity to sit down with Mads Torgersen,
lead designer for the C Sharp programming language. Here's Mads.
Mads, how was your last name pronounced?
Torgersen.
Torgersen.
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 Mæs Torgersen.
They just ignore the D all together.
They ignore the D and many other sounds.
Mæs.
Mæs?
Yeah.
Like, like you made a mess? Almost. It's a little more of an A sound to it. Like the... Mæs. Mess? Yeah. Like you made a mess?
Almost.
It's a little more of an A sound to it.
Mess.
So no D sound.
No D sound.
And then the last name was what?
Torrworsen.
No Gs.
The G is in there, but it's very faint.
It's like a little W sound.
Torrworsen.
You must be upset then.
How long you been hearing people say it wrong?
20 years.
Everybody's calling you mad.
You know, I'll take it.
Yeah?
Are you upset right now?
No.
Okay guys.
I think Mads is one of the coolest names out there.
You know, just roll with it.
I actually, you know, give 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 Principal Architect?
Is that your title?
And you lead the C Sharp language?
Is that?
Yeah, I lead the language design.
I lead the 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.
What's it like being in your shoes?
Little tight, honestly, after three days.
Size of the oven, size of the floor.
Three days on the conference floor.
It's one of these good types, huh?
Western literal.
Yeah.
Love it, love it.
All right, well we're here with Mads Torgerson,
and the lead designer of C-Sharp.
Anders Haldeberg 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.
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,
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-Sheriff 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 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,
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, okay 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,
then 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 gonna 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 heard, 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 upfront 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 you know there is time pressure you got to make a call
and I will do it but I'm uncomfortable with it to be honest because there's 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 is 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 I 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.
Zero lines of code.
Take us to C Sharp Landia 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, close source, quite the journey in terms of where we see ourselves in the world.
It started out as a Windows only, close source,
mainly for apps and a little bit of server stuff
back when that was, you know, 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 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 in 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 code so much anymore. Less sharp edges though.
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 them 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.
Right.
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.
Yes.
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 it syntax and all, you know. We'll
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
and the huge install base, right?
You're like, oh, it would be 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 seemed, or 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 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 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?
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, 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 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.
So the many ways that we just kind of keep tabs
and 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 we 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 there
there's even a scripting dialect of C Sharp.
Although we're trying to kind of get
just a regular C Sharp closer to that.
C Sharp used to be, as a member of that Java H club,
it used to be fairly clunky in terms of syntax.
Like declaring a virtual method and overriding
and all that kind of stuff.
It's a thing with a lot of keywords involved.
Your program would be a main method
that lives in a class.
And you have five lines of code.
A lot of ceremony.
Yeah, before you even have,
before you even have,
before you're 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 just clean this up
and that's definitely inspired by a newer wave of programming languages and
and like more scripting-like languages
that are just more straightforward.
You just sit down and you write, you know,
Brightline Hello World, and there it is.
That's your program, right?
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 wanna 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 at a whole round of stealing we did a we did 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 sequel-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 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-Shark 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,
but your 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.
What level does the pattern matching come in, like at the function declaration level?
Can you pattern match parameters and have multiple functions that fire off depending on what's coming up? 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, 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 alt 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.
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.
You put a, 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 a 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 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 that composability
that extension methods give.
Gotcha.
How do you add all this stuff
and then maintain backwards compatibility and performance?
Sometimes it feels like backwards compatibility is...
I've spent 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.
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 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,, 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 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 that you know
built the understanding of the language there there are people as a 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 on 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,
I'm kind of teeing that up is like, are new C Sharp language features considering
some sort of tooling or AI related things?
Like is that reaching itself in the language design
or is that just like, well, we can just ignore that stuff
and they 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.
Like, you know, 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,
like 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,
like should languages be designed for
for AIs to be able to better train or better predict or something like that? 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, 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 the Gentic, 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
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 ant or a strain,
you know, that kind of thing.
C Sharp doesn't really have a way to express that intent
at the language level.
Gotcha.
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, you know, that intent is evident
not just to other programmers, but also to AI reading
and helping to 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 like the killer scenarios to say,
okay, we should go this way on them.
There are many, there's 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 potential drawbacks of
a feature. And it's like you're just adding a 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 is this because they tend to use union types in other languages a lot? 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 is 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.
Yeah.
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 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?
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 that there's sort of a, it's almost like search engine optimization.
You want to try to look sexy too.
You want to kind of 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.
I think, 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.
But as there's more and more code that's actually vibe coded, there will be these self-sustaining,
self-reinforcing loops maybe where...
Yeah, it might start to eat its own tail.
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.
Yeah, let's see.
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 a, 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.
So-
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.
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.
That's a program.
But the AI might have helped write the program
and the program might have helped inform the AI.
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.
I think that's gonna evolve a ton
over the next couple years.
So as a program 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.
I mean, you've got a huge programming language already.
I honestly think we have a fine tool for that.
At the language level, we're good.
Yeah. 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 think the, I actually think the high-level programming language is super useful for the AIs 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 the AI kind of discern what's going on. 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 is 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 higher than 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'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 they're deterministic in English is not there they're they have clear
semantics yes and English does not right They have clear semantics. Yes.
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.
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 be like a Skunk Works project
that some engineer just does on their own
and then pitches it to somebody and then,
or would that be like a thing where,
I don't know who your boss is, Mads,
but your boss comes and says,
or 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. 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're lucky, it has a decade of cool growth,
and then it's like a legacy.
A 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 effective,
to raise the level of abstraction, push it upwards, become more
powerful and expressive. Maybe AIs 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 AIs 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
and, you know, 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 going to start with this in mind, and start with just blank slate, versus being like, yeah, but we have hundreds of thousands of people using it this way.
And if that language can't get a foothold, then how does it even influence languages like C Sharp to be like, oh, let's think about this differently? Yeah. Even 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, 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 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 it could piggyback onto the stage.
That's kind of how you can break in, right?
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 manage to piggyback something.
We talked about Swift before.
It was Apple's anointed replacement of Objective-C.
And 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 also what the AIs 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.
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 system keeps exciting me
and I think it keeps solving your new problems.
I think obviously for all the worry
that people have about AI,
I think it's going to,
I'm sure they're 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 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,
but 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. 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 gonna spend a couple of months 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 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 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,
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, 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 with not.
Without.
Yeah.
Yeah, exactly.
Yeah, both are challenges at that age.
They're uniquely challenging.
One, you miss them.
And the one, you're like, I want to miss you.
No comment. I love my children so much. Sometimes you have to I want to miss you. You got to get away.
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 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.
Anytime I mess up or like, I gotta go back and say,
you know what, that wasn't too good there.
Yeah.
You know, cause you gotta show kids that you're sorry.
Yeah, for sure, 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. He can get some of it, you know. Yeah. Yeah.
And of course you don't want to make it their problem. But yes. But I think being put in
those situations like stressful. 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 the perspectives and 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 to be vulnerable and sharing and being a person. Yeah, otherwise
You know you kind of you shape them. Yeah. Yeah you do but they 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 I can attribute to the learning
that all those hard moments and tough situations
kind of accumulate to you.
It'll probably make you a better design lead
of a language, Stephen.
It's quite possible.
I'll let others weigh in on that.
I'm probably not the best.
Personally, I think I'm awesome, but you know.
Well, somebody else maybe not so much.
We'll 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?
Yeah, that's right.
Three references.
Other people?
He's just messing around with you.
Is he?
Okay.
Other people?
He's like, okay, he's on the list.
Totally.
I'll give you a name 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.
Awesome talking.
Thanks for sharing with us.
Great pleasure.
Hope you keep having fun at Build.
Always.
Love Build.
Okay, that's Change Log 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 Pipeley 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 depo.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.