WEBVTT

00:00:01.470 --> 00:00:06.310
<v Matthias>Welcome back to a fresh season of Rust in Production, a podcast about companies

00:00:06.310 --> 00:00:08.830
<v Matthias>who use Rust to shape the future of infrastructure.

00:00:09.230 --> 00:00:13.990
<v Matthias>My name is Matthias Endler from corrode, and today we talk to Victor Ciura about

00:00:13.990 --> 00:00:16.350
<v Matthias>large-scale Rust adoption at Microsoft.

00:00:18.950 --> 00:00:23.850
<v Matthias>Victor, thanks so much for joining us today. Can you say a few words about yourself

00:00:23.850 --> 00:00:26.230
<v Matthias>and about Microsoft, the company you work for?

00:00:27.330 --> 00:00:33.290
<v Victor>Hey, thanks for inviting me. I'm a principal engineer on the developer division at Microsoft.

00:00:34.770 --> 00:00:42.590
<v Victor>Before coming to Rust, I spent over 20 years doing C++ exclusively systems programming

00:00:42.590 --> 00:00:47.110
<v Victor>in general and developer tools, worked on various projects, including being

00:00:47.110 --> 00:00:49.610
<v Victor>part of the Visual C++ team at Microsoft.

00:00:50.190 --> 00:00:55.610
<v Victor>And in recent years, I transitioned to work on Rust tooling in developer division.

00:00:56.230 --> 00:01:03.550
<v Matthias>We both met at Eurorost in 2024, and I really had a pleasant experience listening to your talk.

00:01:03.870 --> 00:01:07.230
<v Matthias>It was very honest, brutally honest, let me say.

00:01:07.590 --> 00:01:13.790
<v Matthias>And I really appreciated that. And at the same time, one could see that you're

00:01:13.790 --> 00:01:15.350
<v Matthias>a very experienced engineer.

00:01:15.630 --> 00:01:20.490
<v Matthias>So I'm really looking forward to that conversation today, because I think that

00:01:20.490 --> 00:01:25.010
<v Matthias>we will not only talk about the highlights of using Rust in production,

00:01:25.010 --> 00:01:27.350
<v Matthias>but also maybe some of the downsides.

00:01:28.150 --> 00:01:33.450
<v Matthias>But before we start, there's probably a lot to talk about, but before we start,

00:01:33.650 --> 00:01:40.110
<v Matthias>can you give us an overview and maybe an update of what happened since Eurorust 2024?

00:01:40.730 --> 00:01:46.370
<v Victor>Yeah, definitely. So things in Microsoft, across all organizations in Microsoft,

00:01:46.410 --> 00:01:53.090
<v Victor>Microsoft is a very big place, but things in terms of Rust have moved a lot in the past year.

00:01:53.710 --> 00:02:00.850
<v Victor>And there's so many things brewing. Many of the projects are publicly facing,

00:02:01.110 --> 00:02:05.270
<v Victor>so there's public knowledge, but many of the things we're working on are not

00:02:05.270 --> 00:02:07.490
<v Victor>yet ready to be shared. So stay tuned.

00:02:07.970 --> 00:02:12.630
<v Victor>More stuff is going to be made public this calendar year. But definitely a lot

00:02:12.630 --> 00:02:14.770
<v Victor>of stuff has been going on.

00:02:15.010 --> 00:02:20.530
<v Victor>So back then, we talked about a few of these early efforts with Rust across

00:02:20.530 --> 00:02:27.050
<v Victor>the company, but I have a few more sort of that I wish I could spotlight here. There's,

00:02:27.630 --> 00:02:33.390
<v Victor>All sorts of interesting projects, in my opinion, in my position in the developer division,

00:02:33.390 --> 00:02:39.210
<v Victor>because we are tasked to improve the lives of Rust developers in the company

00:02:39.210 --> 00:02:44.550
<v Victor>and improve developer tooling and sort of unblock them and make sure they're

00:02:44.550 --> 00:02:48.610
<v Victor>productive and doing their best work across all the products and services we have.

00:02:48.610 --> 00:02:54.410
<v Victor>But you can imagine, I hear from all teams across the company and they're either

00:02:54.410 --> 00:02:57.510
<v Victor>telling us how they're using Rust and what they love about it,

00:02:57.610 --> 00:03:01.010
<v Victor>but also complaining about stuff that doesn't work for them.

00:03:01.150 --> 00:03:02.850
<v Victor>And, oh, they're so loud.

00:03:03.930 --> 00:03:10.230
<v Victor>So my team specifically is tasked to make them productive and improve their lives.

00:03:10.410 --> 00:03:16.090
<v Victor>So in this role and in this team, I hear about a lot of interesting projects.

00:03:16.090 --> 00:03:21.910
<v Victor>So they all sort of fascinate me. So, and they're areas that I've never worked

00:03:21.910 --> 00:03:26.130
<v Victor>in and they're so diverse in nature from firmware,

00:03:26.330 --> 00:03:31.930
<v Victor>hardware stuff related to services and SDKs and all sorts of interesting things

00:03:31.930 --> 00:03:34.070
<v Victor>that I've never worked with.

00:03:34.230 --> 00:03:38.730
<v Victor>And now I get to sort of meet these projects and see how they're using Rust

00:03:38.730 --> 00:03:42.890
<v Victor>and the kinds of challenges they're facing and their successes along the way.

00:03:43.050 --> 00:03:47.230
<v Victor>So I wanted to maybe share some of these with you. yeah sure.

00:03:47.230 --> 00:03:49.750
<v Matthias>Let's kick it off by highlighting some of the projects.

00:03:49.750 --> 00:03:52.530
<v Victor>So there's there's work we've been

00:03:52.530 --> 00:03:55.610
<v Victor>doing for example with TockOS

00:03:55.610 --> 00:03:58.430
<v Victor>i don't know if people are familiar with probably your audience is

00:03:58.430 --> 00:04:04.130
<v Victor>familiar with TockOS kernel which is written in in rust we've used this in

00:04:04.130 --> 00:04:09.570
<v Victor>a project for what we call the microsoft pluton security processor we've done

00:04:09.570 --> 00:04:14.670
<v Victor>some collaboration in open source here because we're using this and we've bet

00:04:14.670 --> 00:04:16.250
<v Victor>on this one-source project.

00:04:16.510 --> 00:04:23.810
<v Victor>And it's used in Surface PCs, and we're using this in collaboration with our

00:04:23.810 --> 00:04:27.670
<v Victor>OEM partners as well as how we're building laptops and PCs.

00:04:28.770 --> 00:04:31.870
<v Matthias>Just for the people who might not be familiar with TockOS,

00:04:32.150 --> 00:04:35.210
<v Matthias>as far as I'm aware, and I'm not an expert on the topic,

00:04:35.370 --> 00:04:40.550
<v Matthias>but I think it is a real-time operating system that is very low level,

00:04:40.550 --> 00:04:47.610
<v Matthias>very close to the hardware and it's perfect for when you might need a very,

00:04:48.350 --> 00:04:51.770
<v Matthias>lean runtime and you want to run certain,

00:04:52.690 --> 00:04:57.490
<v Matthias>processes or certain tasks on top of that operating system, which more or less

00:04:57.490 --> 00:04:59.110
<v Matthias>have to react to real-time data.

00:04:59.730 --> 00:05:03.310
<v Victor>Exactly. And it's, for example, in the case of these Copilot PCs

00:05:04.190 --> 00:05:07.790
<v Victor>where we need it, we're using the Intel Partner Security Engine there,

00:05:08.030 --> 00:05:11.610
<v Victor>which is a specialized hardware for security on these devices.

00:05:11.830 --> 00:05:16.770
<v Victor>And we bet on TockOS as a good fit for this.

00:05:17.010 --> 00:05:21.770
<v Victor>And sort of that's how we ended up collaborating on this existing project,

00:05:21.870 --> 00:05:27.570
<v Victor>which was an amazing project and was deemed as a good fit for this.

00:05:27.790 --> 00:05:31.950
<v Matthias>And by collaborating, you mean contributing actual code to the project?

00:05:32.810 --> 00:05:38.890
<v Victor>I can give you, it's a funny story. People think that 32-bit is by all means dead.

00:05:39.110 --> 00:05:44.790
<v Victor>So many, many people don't even think in terms of, oh, do I need 32-bit or something?

00:05:44.790 --> 00:05:50.550
<v Victor>So for this particular Intel chip that we use for this security thing,

00:05:50.810 --> 00:05:53.650
<v Victor>it's actually, it needs 32-bit, right?

00:05:53.790 --> 00:05:58.710
<v Victor>So we did work to port TockOS to 32-bit architecture. That's just one example.

00:05:59.190 --> 00:06:03.130
<v Matthias>Is that already merged into mainline or what's the status on that?

00:06:04.110 --> 00:06:08.410
<v Victor>I don't know. The PR is there, but I don't know if it's merged yet or not.

00:06:08.570 --> 00:06:10.630
<v Victor>But it's definitely public.

00:06:11.590 --> 00:06:12.670
<v Matthias>Wow. Okay.

00:06:12.850 --> 00:06:14.190
<v Victor>I think it should be merged by now.

00:06:14.970 --> 00:06:20.970
<v Matthias>Yeah, I don't know how many 32-bit devices are out there, but I would say there

00:06:20.970 --> 00:06:24.490
<v Matthias>must be millions, probably billions of these devices.

00:06:24.850 --> 00:06:29.530
<v Victor>Yeah, when you think about these specialized cards or specialized hardware that's

00:06:29.530 --> 00:06:32.810
<v Victor>sort of connected to various other more complex infrastructure,

00:06:33.210 --> 00:06:39.130
<v Victor>there's definitely still a need for 32-bit in some places, which people don't actually expect.

00:06:40.050 --> 00:06:43.930
<v Victor>They like to think just in terms of ARM64 or ARM64.

00:06:44.710 --> 00:06:46.430
<v Victor>Intel 64-bit architecture so.

00:06:46.430 --> 00:06:49.810
<v Matthias>It's funny because if if

00:06:49.810 --> 00:06:53.150
<v Matthias>i think of big tech like very large organizations

00:06:53.150 --> 00:06:59.710
<v Matthias>sometimes i hear that it's easier for them to build their own little you know

00:06:59.710 --> 00:07:05.030
<v Matthias>solution or proper solution for example google used that as an excuse to build

00:07:05.030 --> 00:07:08.910
<v Matthias>fuchsia which is also written in rust they could also have contributed to an

00:07:08.910 --> 00:07:11.930
<v Matthias>existing project but in your case for TockOS,

00:07:12.290 --> 00:07:15.610
<v Matthias>you very much contributed to an existing open source project.

00:07:15.790 --> 00:07:19.470
<v Matthias>Can you elaborate on that? Like what was the decision making process behind that?

00:07:19.710 --> 00:07:26.610
<v Victor>So I think for many decades, Microsoft has suffered the not invented here thing syndrome.

00:07:26.950 --> 00:07:31.550
<v Victor>And we tended to think we're the smartest and do everything from scratch because

00:07:31.550 --> 00:07:34.970
<v Victor>we can do it better than anyone else. I think we're cured of that.

00:07:35.110 --> 00:07:38.870
<v Victor>So right now we're very much in the process of looking

00:07:38.870 --> 00:07:41.990
<v Victor>for what's best out there and if

00:07:41.990 --> 00:07:47.670
<v Victor>that best in class in open source fits our needs and aligns in terms of roadmap

00:07:47.670 --> 00:07:53.950
<v Victor>and what we want from it with our project needs and our roadmaps and if it if

00:07:53.950 --> 00:07:58.470
<v Victor>we have this alignment then we're gonna bet on on open source very much the

00:07:58.470 --> 00:08:00.970
<v Victor>the microsoft of today is about,

00:08:02.050 --> 00:08:07.710
<v Victor>doing work in the open and leveraging work that is in the open source so both

00:08:07.710 --> 00:08:12.330
<v Victor>consuming good quality libraries and projects and contributing back.

00:08:12.610 --> 00:08:17.510
<v Victor>So if we don't find such a thing, we will start it, of course.

00:08:18.070 --> 00:08:22.270
<v Victor>But in many cases, we find good projects out there that,

00:08:23.120 --> 00:08:28.160
<v Victor>almost align perfectly with what we need, and then what's the point in reinventing the wheel, right?

00:08:28.600 --> 00:08:29.280
<v Matthias>Yeah, true.

00:08:29.280 --> 00:08:30.840
<v Victor>When we can improve it for everyone.

00:08:31.120 --> 00:08:35.740
<v Matthias>Yeah, absolutely. You said TockOS was used in Surface devices,

00:08:35.960 --> 00:08:38.120
<v Matthias>but isn't Surface a 64-bit device?

00:08:38.620 --> 00:08:43.000
<v Victor>No, this is a specialized chip that's for the security processor.

00:08:43.360 --> 00:08:43.780
<v Matthias>Ah, okay.

00:08:43.820 --> 00:08:46.960
<v Victor>It's not the main integrated CPU.

00:08:47.340 --> 00:08:52.360
<v Matthias>Okay, perfect. Yeah, so we already covered one very...

00:08:53.400 --> 00:08:56.580
<v Matthias>Low-level project, one that is close to the hardware.

00:08:56.740 --> 00:09:00.660
<v Victor>Another one was, and I think we did this a while back, is Project Moo,

00:09:01.000 --> 00:09:08.920
<v Victor>where we did a Wifi implementation that's actually used in Surface laptops and even in Azure boxes.

00:09:09.260 --> 00:09:14.400
<v Victor>So there's a custom Wifi implementation in Rust. And this is,

00:09:14.500 --> 00:09:15.740
<v Victor>again, an open-source project.

00:09:15.960 --> 00:09:19.660
<v Victor>People can actually Google for the GitHub repo for it.

00:09:20.940 --> 00:09:22.080
<v Victor>We can probably.

00:09:22.080 --> 00:09:23.480
<v Matthias>Link to it in the show notes i will.

00:09:23.480 --> 00:09:26.380
<v Victor>Yeah i can provide you with a bunch of links to these

00:09:26.380 --> 00:09:31.380
<v Victor>things then again if we're thinking about these kinds of things with we have

00:09:31.380 --> 00:09:36.240
<v Victor>the calyptra project which is about harder root of trust foundation for building

00:09:36.240 --> 00:09:42.460
<v Victor>more advanced security capabilities so again this is a fully transparent industry

00:09:42.460 --> 00:09:45.720
<v Victor>collaboration effort where We're sort of contributing to this space.

00:09:46.800 --> 00:09:53.520
<v Victor>And again, Azure integrated HSMs, this is Microsoft's new in-house security chip.

00:09:53.680 --> 00:10:00.900
<v Victor>This is meant for isolating cryptographic keys in dedicated vaults. It's FIPS compliant.

00:10:01.560 --> 00:10:05.780
<v Victor>It's about securing key exchange between Azure VMs and all these things.

00:10:05.920 --> 00:10:14.140
<v Victor>So again, we're using Rust in all these security sensitive areas of our cloud

00:10:14.140 --> 00:10:15.240
<v Victor>infrastructure, right?

00:10:15.340 --> 00:10:18.660
<v Victor>If we're talking about hardware that supports the cloud and devices,

00:10:19.060 --> 00:10:24.480
<v Victor>if we're talking about the hypervisors and the services themselves and sort

00:10:24.480 --> 00:10:28.020
<v Victor>of how we're securing this trusted compute platform in the cloud.

00:10:28.320 --> 00:10:34.600
<v Victor>So all across the board, from firmware and hardware and dedicated cards up the

00:10:34.600 --> 00:10:36.740
<v Victor>software stack at all levels, right?

00:10:37.140 --> 00:10:42.220
<v Victor>If we're talking about Azure Post Agents, where we offload on hardware cards

00:10:42.220 --> 00:10:48.600
<v Victor>for managing Azure VM workloads and manage virtualization for storage and networking in Azure.

00:10:49.560 --> 00:10:57.260
<v Victor>Even Hyper-V, right? Which Hyper-V underpins the whole Azure infrastructure for all the VMs, right?

00:10:57.940 --> 00:11:01.860
<v Victor>If you think about classic Hyper-V has been written, I don't know.

00:11:02.720 --> 00:11:07.340
<v Victor>25 years now. I don't even remember. It was written in C++, right?

00:11:07.520 --> 00:11:09.040
<v Victor>And still the bulk of it is C++.

00:11:09.360 --> 00:11:12.340
<v Victor>But we're rewriting parts of it in Rust right now.

00:11:12.680 --> 00:11:17.340
<v Victor>Either parts that we want to secure, so we want to sort of harden various parts

00:11:17.340 --> 00:11:21.300
<v Victor>of the hypervisor, or we're rewriting new parts of it.

00:11:21.380 --> 00:11:26.720
<v Victor>For example, the instruction emulation for ARM64 in Hyper-V is written completely in Rust.

00:11:26.720 --> 00:11:30.240
<v Victor>So the whole hypervisor virtual stack and

00:11:30.240 --> 00:11:33.260
<v Victor>even more and more components in hype or vr rewritten from

00:11:33.260 --> 00:11:36.080
<v Victor>c++ to rust because we want to sort

00:11:36.080 --> 00:11:39.020
<v Victor>of harden those components and and i think that's a

00:11:39.020 --> 00:11:42.700
<v Victor>sort of a theme across microsoft

00:11:42.700 --> 00:11:45.700
<v Victor>not just in azure but maybe azure

00:11:45.700 --> 00:11:49.000
<v Victor>would be the most aggressive such organization in

00:11:49.000 --> 00:11:52.280
<v Victor>microsoft was doing these rust rewrites but

00:11:52.280 --> 00:11:55.140
<v Victor>in general we're we're on

00:11:55.140 --> 00:11:58.180
<v Victor>the one hand trying to harden c++ because we

00:11:58.180 --> 00:12:01.120
<v Victor>have a lot of c++ at microsoft

00:12:01.120 --> 00:12:04.220
<v Victor>as you can like might imagine right the billions

00:12:04.220 --> 00:12:08.280
<v Victor>of lines of code of c++ and and we need to harden c++ because it's not going

00:12:08.280 --> 00:12:14.560
<v Victor>to go away anytime soon so we're investing a lot on on securing c++ both in

00:12:14.560 --> 00:12:20.860
<v Victor>terms of tooling and how we're methodologies around writing c++ but especially

00:12:20.860 --> 00:12:23.080
<v Victor>in terms of tooling and at the same time.

00:12:23.340 --> 00:12:28.540
<v Victor>We're doing these tactical Rust migrations or Rust rewrites,

00:12:28.700 --> 00:12:34.400
<v Victor>where we're identifying pieces of code or components that have been traditionally

00:12:34.400 --> 00:12:36.800
<v Victor>targeted for vulnerabilities over the years,

00:12:36.920 --> 00:12:41.680
<v Victor>sort of the most sensitive parts or things that have most CVEs or exploits that

00:12:41.680 --> 00:12:45.320
<v Victor>were sort of memory caused by memory exploitations.

00:12:45.760 --> 00:12:48.460
<v Victor>And we're just rewriting them in Rust to

00:12:48.460 --> 00:12:54.240
<v Victor>secure them and to be able to prove their security as in not just oh oh it's

00:12:54.240 --> 00:13:00.080
<v Victor>rust it must be secure right rewriting them in rust gives us ways to reason

00:13:00.080 --> 00:13:06.920
<v Victor>about proving their their safety and and do all sorts of better analysis on it can you.

00:13:06.920 --> 00:13:12.820
<v Matthias>Share any internal metrics about how security improved after rewriting parts of it in rust.

00:13:12.820 --> 00:13:15.980
<v Victor>I don't have numbers on hand

00:13:15.980 --> 00:13:19.280
<v Victor>but i've i've seen plenty of presentations coming out

00:13:19.280 --> 00:13:25.580
<v Victor>of we have dedicated security teams in the companies that sort of analyze these

00:13:25.580 --> 00:13:29.620
<v Victor>kinds of patterns across multiple organizations and projects and they regularly

00:13:29.620 --> 00:13:36.140
<v Victor>post statistics so I've seen such presentations internally but I don't have numbers of them but it's.

00:13:37.560 --> 00:13:40.940
<v Victor>People, in general, people tend to think, oh, this is anecdotal.

00:13:40.960 --> 00:13:44.580
<v Victor>As you know, you're rewriting it in Rust and it will just magically be better.

00:13:44.740 --> 00:13:50.140
<v Victor>And they sort of deride this thing. But we have hard data that shows that components

00:13:50.140 --> 00:13:53.360
<v Victor>that have been rewritten are much more solid.

00:13:53.500 --> 00:13:58.180
<v Victor>And we can actually even formally prove some of them to be memory safe,

00:13:58.620 --> 00:14:01.780
<v Victor>both in terms of spatial and temporal safety.

00:14:01.780 --> 00:14:07.000
<v Victor>And I've seen similar studies out of Google on their security blog as well about

00:14:07.000 --> 00:14:12.940
<v Victor>providing statistical information to prove that these rights are improving the

00:14:12.940 --> 00:14:14.140
<v Victor>overall security of systems.

00:14:14.140 --> 00:14:19.500
<v Victor>And more interesting, what I've seen from the Google security study that I read

00:14:19.500 --> 00:14:23.860
<v Victor>last year is that they noticed the incidents,

00:14:24.200 --> 00:14:31.280
<v Victor>the security memory vulnerabilities decreasing just out of writing new components

00:14:31.280 --> 00:14:34.640
<v Victor>in Rust without even needing to touch existing components.

00:14:34.640 --> 00:14:39.380
<v Victor>Because the vast majority of exploits and bugs tend to be in recent code,

00:14:39.740 --> 00:14:44.800
<v Victor>not in code that has been tested and tried and patched for decades, right?

00:14:45.180 --> 00:14:50.440
<v Victor>Most vulnerable code tends to be the most recent code because it has been less

00:14:50.440 --> 00:14:53.700
<v Victor>tested or less battle-hardened, let's say.

00:14:54.500 --> 00:14:56.360
<v Matthias>Do you see the same pattern at Microsoft?

00:14:56.680 --> 00:15:02.140
<v Victor>Yeah, we're seeing similar things. We're not sort of madly going across the

00:15:02.140 --> 00:15:06.100
<v Victor>board and just like for the fun of it, Let's rewrite everything in Rust.

00:15:06.880 --> 00:15:11.000
<v Victor>We're doing these sort of tactical choices where we say, okay,

00:15:11.100 --> 00:15:15.520
<v Victor>this new component, it's better if we write it in Rust.

00:15:16.420 --> 00:15:22.300
<v Victor>Or this component, we feel that by rewriting it in Rust, it will give us a chance

00:15:22.300 --> 00:15:25.080
<v Victor>to rethink it, re-architect it, prove...

00:15:28.380 --> 00:15:31.360
<v Victor>Different sort of pre and post conditions about

00:15:31.360 --> 00:15:36.760
<v Victor>it sort of be be more deliberate and more precise about what we can prove about

00:15:36.760 --> 00:15:41.000
<v Victor>this particular piece of code that we're rewriting so it's it's not sort of

00:15:41.000 --> 00:15:45.720
<v Victor>a blanket statement that oh if we're rewriting everything everything will be

00:15:45.720 --> 00:15:49.660
<v Victor>magically better right we're we're doing sort of very tactical choices here.

00:15:49.660 --> 00:15:57.900
<v Matthias>Google came forward and I said 70% of their issues with code in general were memory safety issues.

00:15:58.320 --> 00:16:02.920
<v Matthias>And I would assume that it's similar across different organizations.

00:16:03.160 --> 00:16:06.480
<v Matthias>I might even remember that there was a similar study from Microsoft.

00:16:06.820 --> 00:16:13.340
<v Victor>Yeah, I think I presented the slide on that at one or two of the conferences last year.

00:16:13.340 --> 00:16:16.160
<v Victor>So it definitely we're seeing the

00:16:16.160 --> 00:16:19.980
<v Victor>same thing as in memory safety dominates

00:16:19.980 --> 00:16:22.820
<v Victor>all cvs across the microsoft so it's

00:16:22.820 --> 00:16:27.480
<v Victor>definitely over 70 percent in microsoft the majority

00:16:27.480 --> 00:16:31.260
<v Victor>so the majority are memory safety issues and all across the board from heap

00:16:31.260 --> 00:16:36.260
<v Victor>corruption heap out of bounds step corruptions type confusions uninitialized

00:16:36.260 --> 00:16:42.120
<v Victor>variables use after freeze all sorts of things so definitely we're seeing the

00:16:42.120 --> 00:16:43.180
<v Victor>same kinds of things, right?

00:16:43.480 --> 00:16:49.780
<v Victor>And in terms of mitigations, yes, like I told you, we're constantly developing

00:16:49.780 --> 00:16:54.020
<v Victor>newer and newer technologies for C++ to address this.

00:16:54.260 --> 00:16:58.600
<v Victor>But with Rust, you get most of these things out of the box, right?

00:16:59.120 --> 00:17:01.940
<v Victor>Again, there's challenges even there,

00:17:02.080 --> 00:17:08.240
<v Victor>but definitely in terms of memory vulnerabilities, we can do a lot better.

00:17:08.240 --> 00:17:13.020
<v Matthias>Was Azure the first Rust project at Microsoft?

00:17:14.470 --> 00:17:16.210
<v Matthias>Was Azure the first to adopt Microsoft?

00:17:16.490 --> 00:17:23.910
<v Victor>I don't know for sure at this point. So very much when Rust started at Microsoft several years ago,

00:17:24.190 --> 00:17:30.610
<v Victor>it was very much a sort of bottom-up thing where various teams or various enthusiastic

00:17:30.610 --> 00:17:34.790
<v Victor>engineers tried out things, tried to rewrite various components,

00:17:35.390 --> 00:17:40.190
<v Victor>for various reasons and claimed some results on them, as in, did it work?

00:17:41.510 --> 00:17:46.270
<v Victor>What were the challenges? what didn't work, and so on. So it was very much sort

00:17:46.270 --> 00:17:48.030
<v Victor>of an experimentation phase.

00:17:48.310 --> 00:17:53.230
<v Victor>And then the following years, based on early successes, there's been a bunch

00:17:53.230 --> 00:17:57.330
<v Victor>of incubation projects across the company in all organizations, not just Azure.

00:17:57.670 --> 00:18:03.650
<v Victor>In Windows, in Office, in Azure, in M365, all across the company, really.

00:18:04.030 --> 00:18:10.470
<v Victor>And I think we did this for a couple of years and sort of had various degrees

00:18:10.470 --> 00:18:13.030
<v Victor>of successes and teams were,

00:18:13.210 --> 00:18:20.510
<v Victor>I think the most impressive thing is that teams were super enthusiastic and

00:18:20.510 --> 00:18:22.910
<v Victor>they felt the experience was,

00:18:23.290 --> 00:18:25.070
<v Victor>in general, a win, right?

00:18:25.150 --> 00:18:29.810
<v Victor>Even if maybe a particular project didn't get the green light to go forward, right?

00:18:29.930 --> 00:18:34.310
<v Victor>If it was just maybe proving something or prototyping something or,

00:18:34.670 --> 00:18:40.970
<v Victor>you know, not all projects get the green light to go ahead, right? For various reasons.

00:18:41.250 --> 00:18:47.050
<v Victor>But even in cases where we just learned from a particular such instance or such

00:18:47.050 --> 00:18:51.790
<v Victor>experience, teams were super enthusiastic and they felt like this could really

00:18:51.790 --> 00:18:54.770
<v Victor>change something at Microsoft, right, in how we do software.

00:18:55.190 --> 00:19:03.170
<v Victor>So after that incubation phase, we're sort of more and more projects started doing Rust seriously.

00:19:03.410 --> 00:19:06.750
<v Victor>We have internal hackathons, right, a couple of times a year.

00:19:06.910 --> 00:19:11.310
<v Victor>And we've long passed the phase where people enthusiastically,

00:19:11.510 --> 00:19:15.790
<v Victor>let's try something or let's incubate this and see how it goes, right?

00:19:16.030 --> 00:19:21.390
<v Victor>Right now, we're in a phase where Rust at Microsoft is taking really seriously.

00:19:21.850 --> 00:19:27.690
<v Victor>And that comes with... So it's both good and scary at the same time, right?

00:19:28.290 --> 00:19:33.390
<v Victor>It's good because that means more teams and developers are empowered to use Rust.

00:19:33.390 --> 00:19:38.810
<v Victor>So it's no longer like sort of covert pirate operation to do something in Rust.

00:19:38.810 --> 00:19:44.970
<v Victor>It's sort of applauded and encouraged when it's appropriate but it also presents

00:19:44.970 --> 00:19:51.610
<v Victor>sort of a very high bar in terms of in terms of expectations right because very

00:19:51.610 --> 00:19:55.450
<v Victor>very much across the company people are feeling that rust is,

00:19:56.590 --> 00:20:01.050
<v Victor>has graduated to be a sort of a premier programming language, right?

00:20:01.250 --> 00:20:06.070
<v Victor>And that means they have the same kinds of expectations from Rust that they

00:20:06.070 --> 00:20:09.870
<v Victor>have from C++ and C Sharp and TypeScript internally,

00:20:10.050 --> 00:20:16.490
<v Victor>as in those used to be traditionally the tier one, the premier languages in the company, right?

00:20:16.650 --> 00:20:23.150
<v Victor>And now as Rust is becoming to be seen as a tier one language at the company,

00:20:23.730 --> 00:20:28.090
<v Victor>all these developers who are getting more and more ambitious in building cool

00:20:28.090 --> 00:20:32.190
<v Victor>stuff with Rust, they sort of have these high expectations as in because they

00:20:32.190 --> 00:20:36.630
<v Victor>come from these worlds, they come from C++, from C Sharp,

00:20:37.450 --> 00:20:42.690
<v Victor>and they expect developer tools to be the same kind of maturity, right?

00:20:43.230 --> 00:20:48.170
<v Victor>So they expect their developer experience, their debugging experience,

00:20:48.390 --> 00:20:52.630
<v Victor>their tooling, their infrastructure to be ready. So they have sort of all these

00:20:52.630 --> 00:20:56.430
<v Victor>expectations in terms of where Rust should be, at least internally.

00:20:57.350 --> 00:21:01.650
<v Matthias>I would assume that also very much depends on the project they are working on.

00:21:01.710 --> 00:21:05.590
<v Matthias>For example, if I work on the Windows kernel, I have different expectations

00:21:05.590 --> 00:21:10.970
<v Matthias>about my tooling than, let's say, if I work with cloud providers or cloud services.

00:21:11.310 --> 00:21:12.130
<v Victor>Definitely, yes.

00:21:12.430 --> 00:21:16.890
<v Matthias>Or do you see similar patterns even across low level and high level?

00:21:16.890 --> 00:21:19.430
<v Matthias>Does it even matter where people use Rust?

00:21:19.770 --> 00:21:22.890
<v Matthias>It has the same deficiencies across the board.

00:21:23.830 --> 00:21:27.150
<v Victor>There are definitely things that are universal.

00:21:27.630 --> 00:21:33.310
<v Victor>I mentioned this. Microsoft is very much a big place and various organizations

00:21:33.310 --> 00:21:40.390
<v Victor>have sort of various internal protocols and specific compliance rules and specific

00:21:40.390 --> 00:21:42.170
<v Victor>infrastructure needs and so on.

00:21:42.170 --> 00:21:51.830
<v Victor>So while there are many commonalities, there's also very specific needs based on project, right?

00:21:51.830 --> 00:21:59.730
<v Victor>And I would say if the Rust likes or sort of,

00:21:59.830 --> 00:22:07.010
<v Victor>let's say, enthusiasm for Rust is maybe the universal thing across Microsoft organizations,

00:22:07.250 --> 00:22:13.170
<v Victor>like everyone loves fast dev compile time iterations, as in if it compiles,

00:22:13.410 --> 00:22:15.770
<v Victor>it most likely works to that kind of feel.

00:22:15.770 --> 00:22:21.110
<v Victor>Or if it's easier to write tests, people will write more tests, right?

00:22:21.350 --> 00:22:23.790
<v Victor>Or be more encouraged to write a lot of tests.

00:22:24.590 --> 00:22:31.110
<v Victor>And the richness of the ecosystems and libraries out there, memory safety guarantees

00:22:31.110 --> 00:22:35.510
<v Victor>that we talked about earlier, and even data race-related concurrency bugs that

00:22:35.510 --> 00:22:36.470
<v Victor>you can reduce with this.

00:22:36.810 --> 00:22:40.990
<v Victor>So sort of the things they love seem to be sort of universal. Yeah.

00:22:42.050 --> 00:22:47.050
<v Victor>And performance, right? Let's not forget that many of the people who are coming

00:22:47.050 --> 00:22:52.810
<v Victor>across in the company are coming from garbage-collected programming languages like C-sharp, right?

00:22:53.170 --> 00:22:59.490
<v Victor>So they like the native systems programming language feel and deterministic

00:22:59.490 --> 00:23:02.830
<v Victor>distraction and snappiness of Rust CodeGen.

00:23:03.210 --> 00:23:09.930
<v Victor>Although the likes are almost universal across the company, the dislikes are

00:23:09.930 --> 00:23:15.910
<v Victor>very much specific on whichever team, what problem they face most, right?

00:23:16.030 --> 00:23:17.350
<v Victor>Or what they struggle with. For

00:23:17.350 --> 00:23:24.010
<v Victor>example, in terms of infrastructure and compliance and security promises.

00:23:25.630 --> 00:23:31.810
<v Victor>There's sort of a common bar across the company, but some organizations have

00:23:31.810 --> 00:23:36.570
<v Victor>more stringent rules in terms of what they need to prove about the compliance

00:23:36.570 --> 00:23:38.430
<v Victor>and security of software issue, right?

00:23:38.430 --> 00:23:43.610
<v Victor>So this is where engineering systems need to work to fill in the gaps,

00:23:43.630 --> 00:23:51.010
<v Victor>as in we've worked for decades to implement all sorts of workflows and engineering

00:23:51.010 --> 00:23:57.650
<v Victor>systems to deal with C++ codebases and C Sharp codebases or TypeScript codebases.

00:23:57.650 --> 00:24:02.510
<v Victor>And we built all sorts of tools from static analysis to checkers to binary tools

00:24:02.510 --> 00:24:08.010
<v Victor>that check various promises and guarantees about the produced binary artifacts

00:24:08.010 --> 00:24:11.110
<v Victor>or binary hardening tools or all sorts of,

00:24:11.230 --> 00:24:14.410
<v Victor>we have a plethora of tools internal that we use online.

00:24:14.690 --> 00:24:19.650
<v Victor>In gen engineering systems. And as you can imagine, a lot of these are sort

00:24:19.650 --> 00:24:20.970
<v Victor>of not there for Rust, right?

00:24:21.110 --> 00:24:27.950
<v Victor>They either don't exist altogether or they just fall flat on their face with

00:24:27.950 --> 00:24:29.570
<v Victor>Rust-generated code, right?

00:24:30.770 --> 00:24:35.870
<v Victor>So we sort of need to fill in these gaps or improve existing tools if there are any, right?

00:24:36.070 --> 00:24:38.970
<v Victor>For example, let's see, static analysis, right?

00:24:39.210 --> 00:24:43.750
<v Victor>But there's also lots of tools at binary level.

00:24:43.750 --> 00:24:48.290
<v Matthias>So do the different teams even share that feedback with one another?

00:24:48.650 --> 00:24:51.790
<v Matthias>Say, for example, someone at Azure finds a great tool.

00:24:52.310 --> 00:24:56.670
<v Matthias>How do you share that internally? You probably have some sort of Microsoft Teams

00:24:56.670 --> 00:25:00.390
<v Matthias>channel or multiple even about tooling for Rust.

00:25:00.570 --> 00:25:03.490
<v Victor>So there's two things that run back.

00:25:03.650 --> 00:25:07.210
<v Victor>So yeah, definitely we have a thriving Rust-Aceans community inside.

00:25:07.210 --> 00:25:13.150
<v Victor>So we actually have internal forums and Teams channels for Rustasians across

00:25:13.150 --> 00:25:17.230
<v Victor>the company where we share sort of learnings from each other. We ask questions.

00:25:17.490 --> 00:25:23.610
<v Victor>We sort of discover things we share. So that's sort of a community sort of things.

00:25:23.770 --> 00:25:28.690
<v Victor>We have many, many, many Rust developers internally who are discussing all sorts

00:25:28.690 --> 00:25:32.230
<v Victor>of interesting stuff there from sharing pieces of code or asking for help or

00:25:32.230 --> 00:25:34.290
<v Victor>sharing a tool or asking about something.

00:25:34.450 --> 00:25:36.570
<v Matthias>Just roughly how many people are in these channels?

00:25:37.230 --> 00:25:40.990
<v Victor>It's it's it's in the thousands i think i haven't

00:25:40.990 --> 00:25:43.750
<v Victor>looked in a while but it's a lot of people it's like

00:25:43.750 --> 00:25:47.210
<v Victor>always generates a lot of noise

00:25:47.210 --> 00:25:51.830
<v Victor>in those channels a lot of discussions every day but going back to your original

00:25:51.830 --> 00:25:57.570
<v Victor>question so that's sort of for for sharing and guidance and asking and discovery

00:25:57.570 --> 00:26:01.110
<v Victor>so there's sort of these internal communities are amazing right and i've learned

00:26:01.110 --> 00:26:04.270
<v Victor>so much from just being in those threads.

00:26:05.410 --> 00:26:09.010
<v Victor>But going back to your original question in terms of tooling and engineering

00:26:09.010 --> 00:26:11.190
<v Victor>systems, that's a totally different story.

00:26:11.350 --> 00:26:13.570
<v Victor>That's not where something happens randomly.

00:26:13.830 --> 00:26:18.790
<v Victor>So we have dedicated engineering systems teams inside the company,

00:26:18.790 --> 00:26:25.670
<v Victor>and we have policies across the board where a team cannot just build something

00:26:25.670 --> 00:26:27.710
<v Victor>the way they like to build it, right?

00:26:27.710 --> 00:26:30.790
<v Victor>There's there's policies and

00:26:30.790 --> 00:26:33.510
<v Victor>and specific rules about how you

00:26:33.510 --> 00:26:36.730
<v Victor>set up infrastructure how you set up pipelines how

00:26:36.730 --> 00:26:39.750
<v Victor>what kind of tools and tasks you run and

00:26:39.750 --> 00:26:44.550
<v Victor>how you do all sorts of processing and audits on on on the build systems so

00:26:44.550 --> 00:26:51.370
<v Victor>there's there's a big branch of engineering systems in the company who's responsible

00:26:51.370 --> 00:26:55.210
<v Victor>in supporting all the programming languages that are used in all projects across

00:26:55.210 --> 00:26:57.850
<v Victor>the company regardless of the organization right so.

00:26:57.850 --> 00:27:04.330
<v Matthias>Can you share a few of the best practices that might be helpful for people outside

00:27:04.330 --> 00:27:08.690
<v Matthias>of microsoft maybe general things that you found out about how to set up a project in rust.

00:27:09.710 --> 00:27:15.130
<v Victor>Oh, there's a, that's a, I think we need more than an hour just for that.

00:27:15.410 --> 00:27:20.730
<v Victor>So there's, hopefully, what we are doing internally is that we're setting what

00:27:20.730 --> 00:27:24.790
<v Victor>we call paved paths for various programming languages, right?

00:27:24.930 --> 00:27:28.790
<v Victor>There's paved path for C++ projects, paved path for C Sharp,

00:27:28.950 --> 00:27:31.110
<v Victor>paved path for Rust. We're building one right now, right?

00:27:31.550 --> 00:27:36.270
<v Victor>Where we're setting up workflows and templates so that people don't have to

00:27:36.270 --> 00:27:39.890
<v Victor>do these kinds of setups manually for each project, right?

00:27:40.250 --> 00:27:43.830
<v Victor>Because you don't want to end up with snowflakes across the company that are

00:27:43.830 --> 00:27:48.410
<v Victor>slightly configured slightly differently, or they're using slightly different things, right?

00:27:48.650 --> 00:27:51.730
<v Victor>So we want very much to standardize best practices.

00:27:52.270 --> 00:27:54.990
<v Victor>So we have pipeline templates, we have

00:27:54.990 --> 00:27:59.030
<v Victor>project templates, we have sort of infrastructure tasks that are shared.

00:27:59.170 --> 00:28:02.130
<v Victor>So it's not a manual bring up process.

00:28:02.130 --> 00:28:08.430
<v Victor>And that's why sort of it's such a high bar to make Rust a sort of a tier one

00:28:08.430 --> 00:28:12.330
<v Victor>supported language in the company because there's so many of these things that

00:28:12.330 --> 00:28:15.910
<v Victor>we need to make sure they're right for prime time and they satisfy the needs

00:28:15.910 --> 00:28:17.050
<v Victor>for all the projects, right?

00:28:17.190 --> 00:28:20.290
<v Victor>Because this is very much a unified rollout, right?

00:28:20.710 --> 00:28:25.550
<v Victor>Regardless if we're talking about secret scanning or static analysis or.

00:28:26.430 --> 00:28:31.150
<v Victor>Any kind of SDL requirement in terms of security analysis or any kind of binary

00:28:31.150 --> 00:28:32.930
<v Victor>checks that we're doing on software and so on.

00:28:33.450 --> 00:28:40.670
<v Victor>So there's lots of such tools and policies, and they all need to be uniformly applied.

00:28:40.670 --> 00:28:44.730
<v Victor>As in, when a new Rust project becomes online in the company,

00:28:45.130 --> 00:28:50.310
<v Victor>it needs to have this proper setup, these pipelines, these templates in place

00:28:50.310 --> 00:28:52.410
<v Victor>in terms of engineering systems and infrastructure.

00:28:53.110 --> 00:28:58.390
<v Victor>It's one thing to start something sort of as a hackathon project and sort of

00:28:58.390 --> 00:29:02.890
<v Victor>build something and share it with a few other colleagues in a team, right?

00:29:03.090 --> 00:29:06.970
<v Victor>As proof of concept, when you build it, that's sort of a different story.

00:29:07.270 --> 00:29:12.670
<v Victor>But when you sort of promote it to this is now a project that is proper project

00:29:12.670 --> 00:29:18.050
<v Victor>in the company, then it needs to be sort of integrated in this engineering system.

00:29:19.050 --> 00:29:24.330
<v Matthias>I can see how this can work for a microservice environment where,

00:29:24.790 --> 00:29:27.510
<v Matthias>for example, you build a new Azure component or so.

00:29:27.790 --> 00:29:33.750
<v Matthias>You have a bootstrapping system for that. But I wonder how it works on the lower level layers.

00:29:34.190 --> 00:29:38.870
<v Matthias>For example, in one of your talks, you mentioned that you chose direct write

00:29:38.870 --> 00:29:41.490
<v Matthias>as one of your first Rust experiments.

00:29:41.490 --> 00:29:46.710
<v Matthias>Experiments and direct write is like a text layout and rendering component that's

00:29:46.710 --> 00:29:50.870
<v Matthias>that's used across windows and office and you mentioned that it has a com-like

00:29:50.870 --> 00:29:55.810
<v Matthias>interface so it has this component object model interface and i wonder if you

00:29:55.810 --> 00:30:00.690
<v Matthias>can even have some sort of bootstrapping pipeline for this when when you start such a project yeah.

00:30:00.690 --> 00:30:05.010
<v Victor>That that's actually a very good segue, I wanted to mention this,

00:30:05.290 --> 00:30:13.570
<v Victor>not all of these things happen as greenfield projects or some perfectly isolated

00:30:13.570 --> 00:30:17.990
<v Victor>thing like, oh, I'm going to extract this new functionality or this new component.

00:30:18.310 --> 00:30:23.310
<v Victor>And it's so nice and pristine and I can, it's self-contained and it has everything

00:30:23.310 --> 00:30:24.690
<v Victor>you need and I can test it.

00:30:26.460 --> 00:30:31.320
<v Victor>It's rarely the case that something is so nicely cut away from everything else, right?

00:30:31.520 --> 00:30:38.240
<v Victor>Sometimes you need to work on something that's highly intertwined or has tight

00:30:38.240 --> 00:30:40.720
<v Victor>integrations into something bigger, right?

00:30:41.280 --> 00:30:46.360
<v Victor>So then it becomes more challenging how you're doing this bridge,

00:30:46.500 --> 00:30:50.060
<v Victor>how you're doing these migrations becomes challenging how you're testing it,

00:30:50.520 --> 00:30:53.380
<v Victor>how you're doing infrastructure for it, definitely, right?

00:30:53.380 --> 00:30:56.320
<v Victor>So just for for your audience

00:30:56.320 --> 00:30:59.240
<v Victor>here in case they don't know you mentioned earlier

00:30:59.240 --> 00:31:02.220
<v Victor>direct write this is a sort of a full stack text

00:31:02.220 --> 00:31:09.500
<v Victor>analysis framework it handles layout and rendering for text textual output right

00:31:09.500 --> 00:31:14.940
<v Victor>so it does font shaping and all those things and it it's it ships in windows

00:31:14.940 --> 00:31:22.060
<v Victor>so it's a it's a dll in windows it it's even cross-platform part of it which is direct write core.

00:31:22.280 --> 00:31:26.400
<v Victor>And this is the part that was rewritten in Rust. It's actually cross-platform, right?

00:31:26.780 --> 00:31:33.140
<v Victor>For example, Office components depend on direct write core and Office is cross-platform, as you know.

00:31:33.660 --> 00:31:41.380
<v Victor>So, and I believe we did this rewrite about four, maybe five years ago,

00:31:41.660 --> 00:31:44.060
<v Victor>maybe four, if I remember correctly.

00:31:44.900 --> 00:31:51.160
<v Victor>So indeed, this component uses com-like interfaces. You mentioned this earlier.

00:31:51.560 --> 00:31:57.000
<v Victor>And this sounds potentially like a scary thing, but it actually can be very

00:31:57.000 --> 00:32:00.100
<v Victor>helpful in terms of when you're doing these gradual rewrites.

00:32:00.320 --> 00:32:06.920
<v Victor>Because one of the biggest challenges we're seeing for gradual Rust adoption

00:32:06.920 --> 00:32:11.720
<v Victor>in Microsoft is challenges around interop, and specifically interop with C++.

00:32:12.160 --> 00:32:15.260
<v Victor>And I sort of wanted specifically to spend

00:32:15.260 --> 00:32:18.180
<v Victor>some time to talk about this because it's such a such a

00:32:18.180 --> 00:32:21.540
<v Victor>big and challenging topic and and but in

00:32:21.540 --> 00:32:25.560
<v Victor>terms of components that have these nice com-like

00:32:25.560 --> 00:32:28.480
<v Victor>boundaries it's actually although it

00:32:28.480 --> 00:32:33.680
<v Victor>might sound scary it's actually a blessing because it provides the natural surface

00:32:33.680 --> 00:32:40.200
<v Victor>separation between worlds that you want to bridge right and and com is sort

00:32:40.200 --> 00:32:45.620
<v Victor>of the grandfather of all interop technologies so it's it's been

00:32:45.700 --> 00:32:49.540
<v Victor>solving interrupt problems for, I don't know, 40-plus years now.

00:32:49.880 --> 00:32:56.940
<v Victor>So it actually allows for gradual rewrites and gradual migration and how you're

00:32:56.940 --> 00:33:00.460
<v Victor>doing this carving out, like, to do incremental porting.

00:33:01.760 --> 00:33:06.260
<v Victor>So that actually turned out to be a good thing, right?

00:33:06.860 --> 00:33:12.220
<v Victor>And Rust code is directly callable from app code through home interfaces.

00:33:12.400 --> 00:33:18.820
<v Victor>And you have this sort of almost natural separation that was provided architecturally beforehand.

00:33:20.460 --> 00:33:23.440
<v Victor>But testing is not easy, right?

00:33:23.680 --> 00:33:29.900
<v Victor>And specifically for this component, for the direct write, I can give you some numbers here.

00:33:30.040 --> 00:33:37.900
<v Victor>I was looking now. So the ported code was about 150,000 lines.

00:33:38.820 --> 00:33:46.360
<v Victor>And it was pretty much a sort of natural translation, like from C and C++ to Rust.

00:33:47.020 --> 00:33:51.980
<v Victor>It didn't require a major re-architecting or rethinking of the component.

00:33:52.140 --> 00:33:54.000
<v Victor>It was fairly straightforward.

00:33:55.320 --> 00:33:58.020
<v Matthias>Work that's nice because one thing that

00:33:58.020 --> 00:34:01.460
<v Matthias>a lot of people cherish about microsoft and

00:34:01.460 --> 00:34:05.140
<v Matthias>windows is that there's such a long guarantee

00:34:05.140 --> 00:34:11.440
<v Matthias>for backwards compatibility so you basically don't ever break apis if possible

00:34:11.440 --> 00:34:16.180
<v Matthias>and i i imagine that might be super hard if you do a translation from c++ to

00:34:16.180 --> 00:34:21.720
<v Matthias>rust for example you need to make sure that all of the invariants are upheld

00:34:21.720 --> 00:34:24.220
<v Matthias>while you do the sensation it's.

00:34:24.220 --> 00:34:26.940
<v Victor>It's very hard and i

00:34:26.940 --> 00:34:29.780
<v Victor>would say the bar is even higher than people

00:34:29.780 --> 00:34:35.340
<v Victor>expect because in general people expect that the contract is the api that you

00:34:35.340 --> 00:34:41.900
<v Victor>provide and say okay this is the api and if the api offers the same guarantees

00:34:41.900 --> 00:34:47.760
<v Victor>we can change the implementation however we want right and nobody will be affected.

00:34:48.300 --> 00:34:53.200
<v Victor>In reality, sometimes, not always, but sometimes it's even worse than that.

00:34:53.340 --> 00:35:00.580
<v Victor>As in, even when there's detectable change in behavior, even if it's not enforced

00:35:00.580 --> 00:35:04.260
<v Victor>by an API contract, some people get angry, right?

00:35:04.480 --> 00:35:07.800
<v Victor>And when I say some people, I don't mean people outside the company,

00:35:07.980 --> 00:35:11.600
<v Victor>as in even internal consumers, right, of various components,

00:35:11.800 --> 00:35:15.780
<v Victor>right? If there's a behavior change that they ended up depending on,

00:35:15.900 --> 00:35:18.400
<v Victor>even if it was sort of out of contract, right?

00:35:18.960 --> 00:35:27.580
<v Victor>But if, you know, Hiram's law, as in if somebody, someone somewhere can take

00:35:27.580 --> 00:35:30.520
<v Victor>a dependency on some observable behavior from your component,

00:35:30.720 --> 00:35:33.800
<v Victor>they will, right? It's a statistical fact, right?

00:35:34.120 --> 00:35:40.220
<v Victor>And by the sheer scale of Microsoft and Windows in general, you will end up

00:35:40.220 --> 00:35:48.120
<v Victor>with components that will rely on out-of-contract behavior from various other components.

00:35:48.400 --> 00:35:52.500
<v Victor>And if you change slightly that behavior, they will complain.

00:35:52.740 --> 00:35:54.120
<v Matthias>Do you have an example for that?

00:35:54.600 --> 00:36:02.840
<v Victor>Not on top of my head, but it's not just isolated cases, right?

00:36:02.920 --> 00:36:04.840
<v Victor>There's many such cases where,

00:36:06.130 --> 00:36:10.390
<v Victor>you end up making a change and somebody gets mad at you.

00:36:11.070 --> 00:36:15.710
<v Matthias>Yeah, I would assume, for example, if you have a library like DirectWrite or

00:36:15.710 --> 00:36:20.210
<v Matthias>GDI, which is the graphics device interface, which goes back to the 80s and

00:36:20.210 --> 00:36:25.550
<v Matthias>early 90s, you also mentioned that in your EuroRust talk if you have such an old components,

00:36:25.890 --> 00:36:29.330
<v Matthias>the side effects even become part of your ABI.

00:36:29.690 --> 00:36:35.070
<v Matthias>Exactly. Yeah, even just the runtime of a certain function might have an impact

00:36:35.070 --> 00:36:39.030
<v Matthias>on your call, on your system. Yeah.

00:36:39.770 --> 00:36:44.330
<v Victor>When we're talking about this, and for GDI, we're talking sort of late 80s,

00:36:44.470 --> 00:36:48.230
<v Victor>early 90s kind of thing, right? It was designed for 286.

00:36:50.410 --> 00:36:54.310
<v Victor>That kind of time thing. So when you're talking about these kinds of components,

00:36:55.070 --> 00:36:58.390
<v Victor>and if you imagine how many

00:36:58.390 --> 00:37:01.590
<v Victor>millions of lines of code use those those

00:37:01.590 --> 00:37:05.070
<v Victor>apis and in in what weird

00:37:05.070 --> 00:37:07.890
<v Victor>ways they've been used and abused because i think

00:37:07.890 --> 00:37:11.590
<v Victor>the word means sometimes abused not used you will

00:37:11.590 --> 00:37:15.210
<v Victor>end up breaking someone so yeah it's it's

00:37:15.210 --> 00:37:18.330
<v Victor>highly critical to make sure that these changes

00:37:18.330 --> 00:37:21.350
<v Victor>do not sort of upset the existing ecosystem and

00:37:21.350 --> 00:37:24.390
<v Victor>for windows there's a very high bar in

00:37:24.390 --> 00:37:27.550
<v Victor>terms of how they're testing stuff not just oh

00:37:27.550 --> 00:37:30.950
<v Victor>we can do test units on this functionality and

00:37:30.950 --> 00:37:33.750
<v Victor>all test units passed and

00:37:33.750 --> 00:37:36.610
<v Victor>we're good ship it it's not like

00:37:36.610 --> 00:37:39.550
<v Victor>that so building the whole like every change

00:37:39.550 --> 00:37:43.670
<v Victor>sort of you need to build the whole operating system you need to pass a enormous

00:37:43.670 --> 00:37:49.150
<v Victor>stress test suite of stuff so it's like it might be sort of record-breaking

00:37:49.150 --> 00:37:53.910
<v Victor>stuff in terms of the amount of tests and stuff that that you need to wait for

00:37:53.910 --> 00:37:56.850
<v Victor>to make sure that Everything just works.

00:37:57.370 --> 00:38:03.010
<v Victor>All sorts of high-level, low-level integration tests, real workloads, all sorts of apps.

00:38:03.630 --> 00:38:09.150
<v Victor>Windows tests tons of apps, and they automate all sorts of workflows through

00:38:09.150 --> 00:38:12.710
<v Victor>those apps, even apps that are super old.

00:38:13.610 --> 00:38:18.850
<v Victor>So you wouldn't believe the high bar of what it means to change something in Windows.

00:38:19.830 --> 00:38:25.110
<v Victor>And especially in a component such low-level as GDI, for example.

00:38:25.230 --> 00:38:27.410
<v Victor>You can break so many things.

00:38:28.390 --> 00:38:33.890
<v Matthias>Especially with those old components like GDI, people will probably find new

00:38:33.890 --> 00:38:39.670
<v Matthias>ways to make unsafe calls and maybe try to break it.

00:38:39.830 --> 00:38:45.050
<v Matthias>Maybe sometimes intentionally, sometimes not intentionally, but just trying to achieve their goal.

00:38:45.310 --> 00:38:47.570
<v Matthias>And they make calls which maybe...

00:38:48.770 --> 00:38:51.970
<v Matthias>Original authors haven't anticipated and i'm thinking

00:38:51.970 --> 00:38:58.250
<v Matthias>this is probably where rust can help you and you allured to that in in a talk

00:38:58.250 --> 00:39:04.510
<v Matthias>where you said the more code you ported to rust the less unsafe code you need

00:39:04.510 --> 00:39:10.130
<v Matthias>could you walk us through that journey like why is that a thing well.

00:39:10.130 --> 00:39:13.070
<v Victor>Yeah because when you when you start sort

00:39:13.070 --> 00:39:16.770
<v Victor>of cutting up pieces that you start rewriting

00:39:16.770 --> 00:39:20.170
<v Victor>you need to interact with the old code because you

00:39:20.170 --> 00:39:23.250
<v Victor>it's a sort of a sometimes even

00:39:23.250 --> 00:39:25.990
<v Victor>catch-22 problem but anyway even if it's

00:39:25.990 --> 00:39:29.410
<v Victor>not a circular thing you still need to call the old

00:39:29.410 --> 00:39:32.130
<v Victor>code let's say c old c code or old

00:39:32.130 --> 00:39:35.370
<v Victor>c++ code and that is sort of on the

00:39:35.370 --> 00:39:38.290
<v Victor>untrusted boundary so when you have like a little

00:39:38.290 --> 00:39:42.010
<v Victor>bit of rust and 98 is

00:39:42.010 --> 00:39:47.750
<v Victor>still the old code sort of your your your unsafe surface is ginormous So you

00:39:47.750 --> 00:39:54.410
<v Victor>need to have a lot of sort of sprinkling unsafe and sort of crossing the FFI

00:39:54.410 --> 00:40:01.310
<v Victor>boundary and doing some really unsafe interrupting because most of your surface is unsafe.

00:40:01.570 --> 00:40:07.290
<v Victor>But as you're doing this gradual process of rewriting more and more code in

00:40:07.290 --> 00:40:11.630
<v Victor>Rust, then this unsafe boundary reduces over time.

00:40:11.630 --> 00:40:16.790
<v Victor>So you sort of have it less and less and less unsafe parts until you sort of

00:40:16.790 --> 00:40:20.710
<v Victor>ideally achieve the total rewrite of that component.

00:40:21.070 --> 00:40:23.150
<v Victor>And then you sort of have these.

00:40:24.070 --> 00:40:30.210
<v Victor>And even if you end up consuming some unsafe bits, you can at least provide

00:40:30.210 --> 00:40:31.910
<v Victor>the safe wrapper around it.

00:40:32.050 --> 00:40:37.110
<v Victor>If let's say maybe there's a last 2% that you can't get rid of for some reason.

00:40:37.290 --> 00:40:42.730
<v Victor>I don't know. You can at least wrap a safe projection around the unsafe part

00:40:42.730 --> 00:40:48.650
<v Victor>that still remains and provide some precondition or sort of assertions about

00:40:48.650 --> 00:40:54.310
<v Victor>how it should supposed to be used in contract so that it still is sound, right?

00:40:54.430 --> 00:41:00.290
<v Victor>Even if underneath is unsafe in some way. So, yeah, this is sort of a general

00:41:00.290 --> 00:41:04.950
<v Victor>trend you see when you're doing this kind of C or C++ to Rust migrations,

00:41:04.970 --> 00:41:08.790
<v Victor>as in the more you do, the less unsafe you need.

00:41:09.570 --> 00:41:14.910
<v Victor>And since you mentioned unsafe, sort of a common misconception that people have

00:41:14.910 --> 00:41:21.130
<v Victor>is that, oh, in many situations, because we're now talking about sort of low-level

00:41:21.130 --> 00:41:22.810
<v Victor>code and you want to sort of have...

00:41:23.810 --> 00:41:29.670
<v Victor>Access, sort of intimate access to hardware and high performance and all this

00:41:29.670 --> 00:41:34.090
<v Victor>good stuff as in close to the metal kind of thing in systems programming.

00:41:34.270 --> 00:41:36.170
<v Victor>They just assume like, of course,

00:41:36.250 --> 00:41:40.230
<v Victor>that's why they've been using C and C++ because that's what you get.

00:41:40.350 --> 00:41:43.530
<v Victor>You get the sharpest tool, the closest to the metal, the highest there is, right?

00:41:43.850 --> 00:41:48.990
<v Victor>And when you're doing this in Rust, then the expectation is that, oh,

00:41:49.130 --> 00:41:51.850
<v Victor>I'm going to need to do a lot of unsafe rust because i

00:41:51.850 --> 00:41:54.550
<v Victor>need to talk to hardware i need to do a lot

00:41:54.550 --> 00:41:57.750
<v Victor>of unsafe things i'm clever here and

00:41:57.750 --> 00:42:03.650
<v Victor>systems engineer and do all sorts of dangerous things so it's expectation that

00:42:03.650 --> 00:42:08.450
<v Victor>you're going to write unsafe rust which is not the case or they expect that

00:42:08.450 --> 00:42:12.690
<v Victor>oh you're going to need to write a lot of unsafe rust to be as performant as

00:42:12.690 --> 00:42:16.870
<v Victor>c or as performant as c++ on when And you're doing that rewrite and say,

00:42:16.930 --> 00:42:20.470
<v Victor>I need to touch pointers.

00:42:20.470 --> 00:42:24.530
<v Victor>I need to do the unchecked thing because it's faster.

00:42:24.850 --> 00:42:28.410
<v Victor>This is a misconception in most cases.

00:42:28.830 --> 00:42:34.550
<v Victor>What we've seen is totally the other case, as in many situations,

00:42:34.550 --> 00:42:38.670
<v Victor>we're getting actually better code gen out of the compiler when we're writing

00:42:38.670 --> 00:42:41.250
<v Victor>safe abstractions, the equivalent safe abstractions.

00:42:41.250 --> 00:42:45.770
<v Victor>Because the compiler can have more guarantees about what's going on in your

00:42:45.770 --> 00:42:51.410
<v Victor>code in terms of aliasing, in terms of interf, in terms of how that code is structured.

00:42:52.850 --> 00:42:56.750
<v Victor>Whereas if you're writing a lot of unsafe, all bets are off,

00:42:56.890 --> 00:43:02.950
<v Victor>as in the compiler needs to be conservative and not as aggressive in what it

00:43:02.950 --> 00:43:05.030
<v Victor>can do in terms of code movement and optimization.

00:43:05.030 --> 00:43:11.410
<v Victor>So in many situations, the preconception of let's throw a lot of unsafe here

00:43:11.410 --> 00:43:17.530
<v Victor>because we're coming from C++ anyway, and we want to have the raw hardware performance,

00:43:17.810 --> 00:43:19.870
<v Victor>we've seen the total opposite. Yeah.

00:43:20.700 --> 00:43:26.500
<v Victor>We're very much recommending that people are using safe Rust and not reach out

00:43:26.500 --> 00:43:30.160
<v Victor>for unsafe because it's an easily available escape hatch, right?

00:43:30.460 --> 00:43:33.020
<v Victor>Because sometimes it's actually worse.

00:43:33.820 --> 00:43:37.880
<v Matthias>Well, there's another large project that is very close to the hardware,

00:43:38.040 --> 00:43:41.180
<v Matthias>which is currently trying to adopt Rust.

00:43:41.380 --> 00:43:45.380
<v Matthias>And that is the Linux kernel. And, you know, on the mailing list,

00:43:45.500 --> 00:43:51.620
<v Matthias>you can see this play out a little bit nowadays, where you have a lot of infighting

00:43:51.620 --> 00:43:54.960
<v Matthias>between very experienced, longstanding developers.

00:43:55.280 --> 00:43:58.720
<v Matthias>And on the other side, you have these people who want to try the new,

00:43:58.800 --> 00:44:00.740
<v Matthias>who want to have safer interfaces.

00:44:01.380 --> 00:44:04.760
<v Matthias>Do you see similar patterns at Microsoft?

00:44:04.760 --> 00:44:10.680
<v Matthias>We have a lot of infighting between older, more senior kernel developers and

00:44:10.680 --> 00:44:14.140
<v Matthias>people that maybe want to introduce Rust just because they think,

00:44:14.300 --> 00:44:16.820
<v Matthias>you know, it will improve the situation in the future.

00:44:16.940 --> 00:44:22.220
<v Matthias>But I guess short-term will also incur a maintenance overhead because you have

00:44:22.220 --> 00:44:27.880
<v Matthias>to keep the Rust interface and the C or C++ interface in sync.

00:44:29.360 --> 00:44:32.480
<v Victor>So I'll preface this with the fact that

00:44:32.480 --> 00:44:36.180
<v Victor>I'm not directly involved in the Linux and Rust

00:44:36.180 --> 00:44:39.040
<v Victor>in Linux project but in terms of what I'm seeing in

00:44:39.040 --> 00:44:45.520
<v Victor>Microsoft I would say there's no such polarization that I'm perceiving again

00:44:45.520 --> 00:44:50.240
<v Victor>I'm not part of the Windows team I just collaborate with a lot of people from

00:44:50.240 --> 00:44:54.960
<v Victor>there because I'm in the developer division and they use our stuff so I'm not

00:44:54.960 --> 00:44:56.780
<v Victor>in I'm not a kernel developer there.

00:44:57.480 --> 00:45:01.040
<v Victor>So again, it's sort of semi-outsider opinion, right?

00:45:01.520 --> 00:45:06.800
<v Victor>But definitely what I'm seeing internally, I don't see this strong polarization and,

00:45:07.580 --> 00:45:12.960
<v Victor>Yes, you have in the company, you have your Rust enthusiasts and evangelists

00:45:12.960 --> 00:45:16.800
<v Victor>who are sort of trying to convince everyone that they should do everything in

00:45:16.800 --> 00:45:22.100
<v Victor>Rust because they're so enthusiastic and it's been so successful for them and their projects.

00:45:22.280 --> 00:45:24.860
<v Victor>So they're genuinely trying to help everyone.

00:45:25.120 --> 00:45:29.980
<v Victor>And sometimes they can be a bit overwhelming.

00:45:29.980 --> 00:45:36.720
<v Victor>Thing and what i see is in general when you reply a lot of pressure automatically

00:45:36.720 --> 00:45:40.700
<v Victor>you get some resistance right from people even if they don't have sort of strong

00:45:40.700 --> 00:45:45.880
<v Victor>counters they don't like that you're coming off strong so they would just naturally

00:45:45.880 --> 00:45:48.920
<v Victor>resist so but i definitely don't see.

00:45:50.400 --> 00:45:53.640
<v Victor>Polarization as such as in people are

00:45:53.640 --> 00:45:56.660
<v Victor>genuinely looking at stuff on face

00:45:56.660 --> 00:45:59.980
<v Victor>value as in does this thing help me right does

00:45:59.980 --> 00:46:03.980
<v Victor>it make the component better does it improve security

00:46:03.980 --> 00:46:07.080
<v Victor>of this thing does it if we're

00:46:07.080 --> 00:46:10.060
<v Victor>talking about coming from c and c++ to

00:46:10.060 --> 00:46:14.860
<v Victor>rust it's really the case that they're after extra performance right because

00:46:14.860 --> 00:46:18.220
<v Victor>they already have the performance side of the story they're mostly interested

00:46:18.220 --> 00:46:22.660
<v Victor>in can i improve the ergonomics of the code can i improve the security of the

00:46:22.660 --> 00:46:28.500
<v Victor>code so it's very much about can i secure this component can i reduce my headaches right Let's.

00:46:28.500 --> 00:46:32.980
<v Matthias>Say I wanted to start a new project in C++ in 2025 at Microsoft,

00:46:33.240 --> 00:46:34.440
<v Matthias>would that raise some eyebrows?

00:46:35.500 --> 00:46:43.040
<v Victor>There is no company-wide mandate of banning new projects using C++ or even C for that matter.

00:46:45.080 --> 00:46:50.300
<v Victor>It's maybe frowned upon if I were to put a label on it,

00:46:50.400 --> 00:46:57.040
<v Victor>but there's no sort of mandate as in if you're starting something new,

00:46:57.100 --> 00:47:00.180
<v Victor>you better not touch C++. There's no such thing in the company.

00:47:00.500 --> 00:47:11.960
<v Victor>There is a strong mandate of that in Azure and in highly security-critical areas, right?

00:47:13.160 --> 00:47:20.860
<v Victor>If you're thinking maybe security modules cryptography those sorts of things and.

00:47:22.100 --> 00:47:28.500
<v Victor>Hypervisor things highly sensitive areas of of cloud infrastructure right on

00:47:28.500 --> 00:47:34.740
<v Victor>those areas yes there is sort of a mandate for memory safe languages right and

00:47:34.740 --> 00:47:39.080
<v Victor>in many situations rust is the only one that fits the bill in terms of being

00:47:39.080 --> 00:47:42.080
<v Victor>memory safe and performant in other the situation,

00:47:42.280 --> 00:47:44.200
<v Victor>C-sharp fits the bill just fine, right?

00:47:44.660 --> 00:47:49.040
<v Victor>So depending on the kind of workload, but there's no such thing as in across

00:47:49.040 --> 00:47:53.800
<v Victor>the company, you're not supposed to write new stuff in C and C++.

00:47:54.240 --> 00:48:00.060
<v Victor>And there's statistically, because just of the size of the stuff around,

00:48:00.220 --> 00:48:04.080
<v Victor>as in there's more C++ code being written every day than Rust code.

00:48:04.260 --> 00:48:08.320
<v Victor>Just imagine the scale of Microsoft product. So...

00:48:08.860 --> 00:48:14.120
<v Victor>The quantity of Rust code increases exponentially in the company,

00:48:14.360 --> 00:48:20.780
<v Victor>there's so much C++ in the company that a new code that is written or fixed

00:48:20.780 --> 00:48:24.800
<v Victor>or improved in those components will need to be C++, right?

00:48:25.280 --> 00:48:30.540
<v Victor>So, and it will take a while between this will ever change, right?

00:48:30.640 --> 00:48:34.520
<v Victor>Just imagine the billions of lines of C++ there in the company.

00:48:35.500 --> 00:48:39.580
<v Matthias>It's kind of crazy to think that Rust's growth is exponential at Microsoft.

00:48:40.000 --> 00:48:41.720
<v Matthias>That's kind of a positive.

00:48:42.440 --> 00:48:49.120
<v Victor>I'm not casually calling it that way. So being in the developer division,

00:48:49.560 --> 00:48:55.960
<v Victor>I'm sort of, my team is in a unique position to see this firsthand because everyone

00:48:55.960 --> 00:48:58.540
<v Victor>sort of comes to us when they have a problem.

00:49:00.360 --> 00:49:06.140
<v Victor>So developer division is tasked to prove the tools and create the tools to help

00:49:06.140 --> 00:49:09.400
<v Victor>developers across the company be successful.

00:49:09.680 --> 00:49:18.040
<v Victor>So based on how I see requests coming in and the conversations I'm part of and

00:49:18.040 --> 00:49:22.620
<v Victor>the investments that I'm seeing across the board in terms of supporting these

00:49:22.620 --> 00:49:23.820
<v Victor>tools and infrastructures,

00:49:24.080 --> 00:49:27.120
<v Victor>this is the only natural conclusion you can draw, right?

00:49:27.340 --> 00:49:35.600
<v Victor>Because I think we reached an inflection point in the company where we're all in on Rust, as in,

00:49:36.020 --> 00:49:42.180
<v Victor>we're committed to making Rust succeed at Microsoft because we've seen so many

00:49:42.180 --> 00:49:49.040
<v Victor>successes in various projects and teams are no longer sort of treating it as a hobby experiment,

00:49:49.380 --> 00:49:53.780
<v Victor>a happy accident that this thing works great in Rust. No, they're seeing it as...

00:49:55.060 --> 00:49:58.260
<v Victor>On this thing. We're betting on technology, on this technology,

00:49:58.440 --> 00:50:03.060
<v Victor>we're betting on this language, we're betting on the community of libraries out there and so on.

00:50:03.660 --> 00:50:10.580
<v Matthias>So your team has to make sure that Rust projects at Microsoft are set up to

00:50:10.580 --> 00:50:14.480
<v Matthias>be a success, at least from an infrastructure perspective.

00:50:14.840 --> 00:50:17.960
<v Matthias>What are the top three things, or tooling perspective, sorry,

00:50:18.120 --> 00:50:23.240
<v Matthias>what are the top three let's say issues that people come and approach you with

00:50:23.240 --> 00:50:25.200
<v Matthias>and why is number one compile times?

00:50:29.040 --> 00:50:35.500
<v Victor>Well, yeah. Well, people coming from C++ don't complain about compile times.

00:50:35.700 --> 00:50:37.540
<v Victor>Let me put it this way.

00:50:37.780 --> 00:50:43.580
<v Victor>So only people coming from C Sharp and the net complain about compile times.

00:50:44.220 --> 00:50:49.020
<v Victor>C++ people are used to getting their coffee or reading the Reddits where they compile.

00:50:52.340 --> 00:50:55.460
<v Victor>No i would say top things

00:50:55.460 --> 00:50:58.980
<v Victor>number one meeting compliance and

00:50:58.980 --> 00:51:04.260
<v Victor>security promises and that ties into our earlier conversation about engineering

00:51:04.260 --> 00:51:08.880
<v Victor>systems and missing tools and improving the guidance improving the templates

00:51:08.880 --> 00:51:14.140
<v Victor>improving the security checks there's a lot of things that are missing i can't

00:51:14.140 --> 00:51:18.860
<v Victor>talk about the details of many of those things because they don't make sense outside of Microsoft.

00:51:19.100 --> 00:51:23.420
<v Victor>And also, they're not public tools, many of them. They're used in internal infrastructure.

00:51:24.000 --> 00:51:28.380
<v Victor>But we are leveraging external tools when they make sense inside the company, right?

00:51:28.880 --> 00:51:33.240
<v Victor>Even, for example, for static analysis, we're using Clippy and compiler links.

00:51:33.580 --> 00:51:37.700
<v Victor>We're investing in CodeQL for Rust and so on.

00:51:37.900 --> 00:51:43.680
<v Victor>So there's many, I would say, in the engineering systems and compliance area.

00:51:43.800 --> 00:51:48.620
<v Victor>That's sort of top concern because many projects are sort of ready to go into

00:51:48.620 --> 00:51:54.660
<v Victor>production and they're blocked in such sort of compliance stages where they

00:51:54.660 --> 00:51:58.520
<v Victor>need to check some boxes so that they can go in production, right?

00:51:59.700 --> 00:52:04.100
<v Victor>And so maybe number two would be interop.

00:52:04.440 --> 00:52:09.000
<v Victor>I would say, again, I mentioned this earlier, in order for us to succeed,

00:52:09.880 --> 00:52:14.660
<v Victor>you need to have a good bridge for C++ developers.

00:52:14.660 --> 00:52:18.040
<v Victor>But even for C-sharp developers, we're not talking just interrupt with C++,

00:52:18.340 --> 00:52:22.000
<v Victor>we're talking even interrupt with C-sharp in some scenarios. So...

00:52:23.480 --> 00:52:26.480
<v Victor>Story the interop story needs to be ergonomic needs to

00:52:26.480 --> 00:52:30.120
<v Victor>be low cost and needs

00:52:30.120 --> 00:52:33.960
<v Victor>to so in interop it's many things again if you

00:52:33.960 --> 00:52:40.660
<v Victor>tend to talk to a particular kind of project you will find sort of maybe some

00:52:40.660 --> 00:52:45.360
<v Victor>requirements that they have for interop but again at at the scale of microsoft

00:52:45.360 --> 00:52:49.560
<v Victor>and how diverse the projects are across the board depending on who you talk

00:52:49.560 --> 00:52:52.620
<v Victor>to they will tell you different things when they mean interop, right?

00:52:52.940 --> 00:52:57.820
<v Victor>Some teams care a lot about high fidelity language interop, right?

00:52:58.020 --> 00:53:01.980
<v Victor>And some teams care a lot about sort of the glue code and the automation of

00:53:01.980 --> 00:53:04.060
<v Victor>generating the glue code for the interop.

00:53:04.500 --> 00:53:09.700
<v Victor>Other teams will say, oh, I have this enormous API surface and I just don't

00:53:09.700 --> 00:53:14.220
<v Victor>want to duplicate these 10,000 functions that I have in C++.

00:53:14.220 --> 00:53:18.580
<v Victor>I don't want to have them on the Rust side as well to check in two versions

00:53:18.580 --> 00:53:20.160
<v Victor>of the functions in the repo, right?

00:53:20.420 --> 00:53:25.480
<v Victor>So I want some compiler magics or metadata to generate those stuff for me without

00:53:25.480 --> 00:53:27.100
<v Victor>me having to check them in.

00:53:28.200 --> 00:53:36.360
<v Victor>So other teams care less about the language interop part and more about the binary interop aspect.

00:53:36.860 --> 00:53:40.960
<v Victor>Because again, depending on the kind of project you're talking about,

00:53:41.200 --> 00:53:45.180
<v Victor>some projects are big monoliths that compile everything from source.

00:53:45.360 --> 00:53:48.860
<v Victor>So we have just one ginormous binary at the end.

00:53:49.380 --> 00:53:54.140
<v Victor>Other projects are very much a mix of multiple shared libraries, right?

00:53:55.280 --> 00:53:59.060
<v Victor>And many, many projects in the company are very much in this...

00:54:00.630 --> 00:54:06.390
<v Victor>Bucket of DLLs kind of thing, right? And there you need to properly handle interop,

00:54:06.610 --> 00:54:13.250
<v Victor>even as you might have a DLL written in C++ and a DLL written in Rust and the

00:54:13.250 --> 00:54:15.930
<v Victor>process written in Rust and they need to talk to each other, right?

00:54:16.110 --> 00:54:18.570
<v Victor>And they're not always sort of leaf dependencies.

00:54:18.850 --> 00:54:21.790
<v Victor>Sometimes there may be more complex interactions between them.

00:54:22.110 --> 00:54:27.930
<v Victor>So very complicated challenges around dynamic linking, right?

00:54:27.930 --> 00:54:36.590
<v Victor>Challenges around ABI stability and the fact that it's clunky for Rust to provide

00:54:36.590 --> 00:54:39.310
<v Victor>any kind of ABI stability and resilience.

00:54:39.650 --> 00:54:43.190
<v Victor>`repr(c)` just isn't an ABI story, let's face it.

00:54:45.190 --> 00:54:52.770
<v Matthias>What's missing? I'm not an expert in that area, but what else do we need other than `repr(c)`?

00:54:53.410 --> 00:54:59.230
<v Victor>I did a talk at Rust Nation UK last week. an hour long talk about ABI resilience

00:54:59.230 --> 00:55:06.270
<v Victor>okay I will listen to that one if I can use this opportunity to plug that of

00:55:06.270 --> 00:55:10.950
<v Victor>course whenever it becomes available on YouTube yeah we will link to it in the show notes,

00:55:11.730 --> 00:55:17.090
<v Victor>so I guess I don't want to do it injustice here in just five minutes awesome

00:55:17.090 --> 00:55:21.990
<v Victor>but in general sort of going down to C as your,

00:55:22.990 --> 00:55:27.610
<v Victor>FFI thing in many situations is fine as in,

00:55:29.740 --> 00:55:36.480
<v Victor>dumbing down your interfaces and your intro player to just C and C-like types,

00:55:36.480 --> 00:55:39.280
<v Victor>it might be fine for many projects.

00:55:39.600 --> 00:55:44.780
<v Victor>But in some scenarios, when you have fancier vocabulary types and you're actually

00:55:44.780 --> 00:55:47.980
<v Victor>using C++ and you're not in the bucket of saying,

00:55:48.140 --> 00:55:54.660
<v Victor>oh, it's a C++ project, but it's actually a C project with some C++ constructs in it, right?

00:55:54.660 --> 00:56:01.100
<v Victor>So if you're actually using vocabulary types that are sort of richer from the

00:56:01.100 --> 00:56:04.040
<v Victor>C++ language or on the other side from the Rust language,

00:56:04.120 --> 00:56:09.460
<v Victor>you don't want to sort of have a sort of common denominator and go through C

00:56:09.460 --> 00:56:15.660
<v Victor>and sort of dumb down your interface and make them way less expressive and ergonomic.

00:56:16.280 --> 00:56:18.700
<v Victor>So that's why it matters.

00:56:19.280 --> 00:56:24.320
<v Matthias>When I think of interop, I also think of the OS interop side of things.

00:56:24.660 --> 00:56:28.620
<v Matthias>For example, path handling or string handling and so on.

00:56:29.080 --> 00:56:33.560
<v Victor>That's another business, string handling. You mentioned that.

00:56:33.680 --> 00:56:35.800
<v Victor>Oh, that's such a big can of worms in Windows.

00:56:37.240 --> 00:56:42.100
<v Victor>It's a bit more civilized on the Linux side of things, but on Windows, it's a nightmare.

00:56:42.760 --> 00:56:49.180
<v Victor>And just the plethora of types of strings and how they're represented and their

00:56:49.180 --> 00:56:52.040
<v Victor>encodings and what APIs expect,

00:56:52.040 --> 00:56:55.800
<v Victor>it's just bites people a

00:56:55.800 --> 00:56:59.300
<v Victor>lot and and sometimes they even attribute string

00:56:59.300 --> 00:57:02.320
<v Victor>handling to interrupt costs because they don't

00:57:02.320 --> 00:57:06.440
<v Victor>realize that crossing these intro boundaries sometimes you require that you

00:57:06.440 --> 00:57:10.340
<v Victor>represent strings differently and then you're paying a cost for this translation

00:57:10.340 --> 00:57:17.600
<v Victor>so they're not sort of zero cost interrupt abstractions so it is it's it is

00:57:17.600 --> 00:57:20.480
<v Victor>painful and again it depends on your project.

00:57:20.620 --> 00:57:27.940
<v Victor>If your project is very much sort of low needs in terms of boundary interaction,

00:57:28.140 --> 00:57:34.000
<v Victor>your interfaces are sort of low levels C-like things and,

00:57:34.710 --> 00:57:38.750
<v Victor>you might get away with simple automation and simple tools like BindGen,

00:57:38.890 --> 00:57:45.110
<v Victor>C-BindGen and do your FFI even manually. I've seen people do manual FFI and

00:57:45.110 --> 00:57:46.830
<v Victor>be just happy with it, right?

00:57:47.010 --> 00:57:53.850
<v Victor>But if you have fancier things and more complex APIs and your interrupt surface

00:57:53.850 --> 00:57:58.370
<v Victor>is larger, then even tools like CXX will not cut it.

00:57:59.290 --> 00:58:01.890
<v Victor>People struggle. So we need to do better.

00:58:02.870 --> 00:58:06.650
<v Victor>Not just in Microsoft. As a community, we need to do better.

00:58:06.850 --> 00:58:09.590
<v Victor>We need to sort of build better tools here.

00:58:09.930 --> 00:58:17.170
<v Victor>Because I believe the success of Rust very much depends on if we can build these

00:58:17.170 --> 00:58:22.610
<v Victor>bridges that are easy to cross from C++ or from C Sharp in our case.

00:58:23.610 --> 00:58:27.710
<v Victor>And I didn't even talk about build systems. As in another thing,

00:58:28.270 --> 00:58:33.110
<v Victor>sort of top problem here is fitting cargo in existing build systems.

00:58:33.110 --> 00:58:36.130
<v Victor>Right how do you fit cargo in let's say

00:58:36.130 --> 00:58:39.650
<v Victor>you have an an a cmake project that has

00:58:39.650 --> 00:58:42.790
<v Victor>all sorts of components and you want to fit in some rust component in

00:58:42.790 --> 00:58:46.390
<v Victor>there and fit the cargo build with the cmake build or

00:58:46.390 --> 00:58:51.650
<v Victor>you might have in our case we have a lot of ms build based projects right that

00:58:51.650 --> 00:58:56.070
<v Victor>are building c++ or c sharp solutions and you want to fit in cargo with the

00:58:56.070 --> 00:59:01.170
<v Victor>build system make sure that everything works properly dependencies cleanup caching

00:59:01.170 --> 00:59:06.370
<v Victor>infrastructure everything that entails from that and that people expect to just work, right?

00:59:07.860 --> 00:59:12.740
<v Victor>It's a big challenge and i think making rust

00:59:12.740 --> 00:59:16.340
<v Victor>succeed we need to check all these boxes not just developers

00:59:16.340 --> 00:59:19.140
<v Victor>are already sort of enthusiastic about the language itself and

00:59:19.140 --> 00:59:22.000
<v Victor>the problem it solves from them right we just

00:59:22.000 --> 00:59:25.320
<v Victor>need to solve the tuning right because there's

00:59:25.320 --> 00:59:29.160
<v Victor>sort of it's a it's it's an enthusiasm ramp

00:59:29.160 --> 00:59:32.280
<v Victor>as in they're super excited and they do they

00:59:32.280 --> 00:59:35.480
<v Victor>want to do stuff and they build their prototypes and they they

00:59:35.480 --> 00:59:38.660
<v Victor>they show some wins either performance

00:59:38.660 --> 00:59:43.800
<v Victor>or security or whatever they're super excited and then they face this roadblock

00:59:43.800 --> 00:59:49.320
<v Victor>of oh now i need to make it work for real as in i need official pipelines i

00:59:49.320 --> 00:59:55.960
<v Victor>need tooling i need checks i need whatever and then frustration starts just staying up.

00:59:55.960 --> 01:00:00.100
<v Matthias>To date with that incoming stream of changes is even hard.

01:00:00.180 --> 01:00:03.220
<v Matthias>That's also why you need intro, why you need code generation and so on,

01:00:03.260 --> 01:00:08.060
<v Matthias>because a lot of people, they don't really know how large Microsoft is.

01:00:08.180 --> 01:00:12.400
<v Matthias>For example, I think we talked earlier that Windows, the operating system,

01:00:12.540 --> 01:00:16.860
<v Matthias>gets around 1,000 pull requests a day, and that's like a huge scale that you're

01:00:16.860 --> 01:00:20.300
<v Matthias>operating on, so you cannot manually do all of these things.

01:00:20.480 --> 01:00:22.300
<v Matthias>You kind of need tooling for that.

01:00:23.200 --> 01:00:28.960
<v Matthias>I wonder, so if there was someone listening right now and they were thinking

01:00:28.960 --> 01:00:33.900
<v Matthias>about how to help you in an let's say in a product kind of way would there even be,

01:00:34.660 --> 01:00:40.000
<v Matthias>a chance for them to sell microsoft a tool for example i don't know a private

01:00:40.000 --> 01:00:44.560
<v Matthias>registry or a better code generator or a better search engine for Rust code

01:00:44.560 --> 01:00:48.580
<v Matthias>would you even be interested in any of these products or do you have a product

01:00:48.580 --> 01:00:53.580
<v Matthias>in mind that you would encourage people to build that could be useful outside of Microsoft as well?

01:00:55.240 --> 01:01:03.320
<v Victor>So I believe in, and it's not just my opinion, it's how we see things for Rust in Microsoft.

01:01:04.300 --> 01:01:07.860
<v Victor>Sure, we're building, I mentioned earlier, we're building a lot of sort of stuff

01:01:07.860 --> 01:01:13.160
<v Victor>in terms of tooling that makes sense for engineering systems and sort of solve

01:01:13.160 --> 01:01:17.540
<v Victor>our particular needs internally and they don't make much sense for everyone else.

01:01:17.720 --> 01:01:21.980
<v Victor>But when we see an opportunity that something that we're building for internal

01:01:21.980 --> 01:01:27.220
<v Victor>needs makes sense for other teams as well as which are outside of our engineering

01:01:27.220 --> 01:01:31.920
<v Victor>systems, outside of our company, we very much contribute to those projects.

01:01:31.940 --> 01:01:36.280
<v Victor>Like I mentioned earlier with some of the examples I gave in when I highlighted projects,

01:01:37.550 --> 01:01:45.010
<v Victor>think the key here is not building products and and sort of building better products that we can,

01:01:45.690 --> 01:01:49.770
<v Victor>license or leverage or whatever i think we need to move the bar in terms of

01:01:49.770 --> 01:01:55.690
<v Victor>the community as in each company when it sees an opportunity to improve something

01:01:55.690 --> 01:01:59.450
<v Victor>if it makes sense to improve it for everyone that's what should be doing and

01:01:59.450 --> 01:02:04.250
<v Victor>that's what we're doing whenever we see a gap in an open source tool,

01:02:04.670 --> 01:02:07.150
<v Victor>we do the work in open source to improve it.

01:02:07.290 --> 01:02:11.530
<v Victor>When we see a gap in the compiler and in Rust Projects itself,

01:02:11.710 --> 01:02:15.050
<v Victor>we have a lot of Rust Project contributors working in Microsoft.

01:02:15.310 --> 01:02:20.750
<v Victor>And we love to do all that work in upstream because who would want to maintain a private fork, right?

01:02:22.110 --> 01:02:26.550
<v Victor>So everyone benefits if we're doing this. And we're not the only ones, right?

01:02:26.710 --> 01:02:31.610
<v Victor>All the big companies who are betting on Rust and they need a lot of similar

01:02:31.610 --> 01:02:38.250
<v Victor>things internally for their engineering systems, they end up doing the work in open source, right?

01:02:38.370 --> 01:02:43.030
<v Victor>Either spinning off new projects or new open source things or contributing to

01:02:43.030 --> 01:02:45.330
<v Victor>existing open source projects. And that's what we're doing as well.

01:02:45.630 --> 01:02:52.130
<v Victor>So I think the secret sauce here is pulling resources together and sort of working

01:02:52.130 --> 01:02:55.090
<v Victor>so that everyone can take them further.

01:02:55.670 --> 01:03:02.170
<v Matthias>Is the opposite also true where you adopt a product that might be mature and

01:03:02.170 --> 01:03:05.970
<v Matthias>you integrate it into your build process if it makes sense?

01:03:06.210 --> 01:03:11.910
<v Matthias>Do you have examples of maybe tools that are missing right now that people could

01:03:11.910 --> 01:03:15.490
<v Matthias>build and maybe productize in the Rust space?

01:03:16.050 --> 01:03:20.930
<v Victor>I think we need more investment in static analysis for Rust,

01:03:22.770 --> 01:03:29.130
<v Victor>And I'm seeing an opportunity there. And we have good stuff already,

01:03:29.330 --> 01:03:32.750
<v Victor>but I see an opportunity to invest more.

01:03:33.650 --> 01:03:34.990
<v Matthias>Shouldn't Clippy solve that?

01:03:35.310 --> 01:03:39.070
<v Victor>Yes, but we need more checks. Yeah.

01:03:39.530 --> 01:03:40.190
<v Matthias>More checks.

01:03:40.490 --> 01:03:46.030
<v Victor>So it's, and again, it's a perfect example where it's an open source project. Everyone benefits.

01:03:47.230 --> 01:03:52.810
<v Victor>Checks are opt-in, so you're not disturbing anyone, right? So anyone who can

01:03:52.810 --> 01:03:56.970
<v Victor>contribute more stuff there, I think it's a win for everyone.

01:03:57.670 --> 01:04:03.890
<v Victor>And dynamic analysis and projects like Miri, for example, it's another area

01:04:03.890 --> 01:04:07.530
<v Victor>where I think we can invest more and everyone would benefit.

01:04:08.250 --> 01:04:15.710
<v Matthias>I truly believe that Miri also has potential to be maybe a part of a larger product.

01:04:15.710 --> 01:04:19.150
<v Matthias>You say that this is a great feature, but again,

01:04:19.350 --> 01:04:23.670
<v Matthias>you probably want to have a thing that takes care of this, a platform that you

01:04:23.670 --> 01:04:30.470
<v Matthias>can point people to and say, look, we degraded in that certain metric,

01:04:30.490 --> 01:04:33.250
<v Matthias>or can you take a look at this specific thing?

01:04:33.250 --> 01:04:36.770
<v Matthias>And when people use Tokyo in production, that might also be an issue where,

01:04:36.810 --> 01:04:40.730
<v Matthias>you know, maybe you have a race condition that is very hard to find.

01:04:40.930 --> 01:04:46.930
<v Matthias>Maybe there's a tool out there that could analyze that and highlight that issue for you.

01:04:47.390 --> 01:04:50.770
<v Matthias>There are tools like this for the Go ecosystem, for example,

01:04:50.970 --> 01:04:52.630
<v Matthias>which just don't really have them in Rust.

01:04:53.390 --> 01:05:00.290
<v Victor>And another thing where we're actively trying to drive community work is the

01:05:00.290 --> 01:05:03.150
<v Victor>language itself and stabilizing things.

01:05:03.870 --> 01:05:09.830
<v Victor>We see a lot of internal teams who are enthusiastic about particular functionality,

01:05:10.070 --> 01:05:16.790
<v Victor>either a tool or some language or library thing, but it takes a long time to stabilize them.

01:05:17.550 --> 01:05:22.590
<v Victor>So in general, we want to discourage people internally to be on nightlies,

01:05:22.870 --> 01:05:25.050
<v Victor>aside from experimentation, of course.

01:05:25.410 --> 01:05:28.830
<v Victor>So anything production needs to be on stable Rust.

01:05:29.590 --> 01:05:33.770
<v Victor>But we see a lot of things and sort of themes

01:05:34.070 --> 01:05:39.930
<v Victor>excited about either something in library space or some particular tool,

01:05:40.270 --> 01:05:44.830
<v Victor>sometimes even language constructs, but mostly tooling and library stuff.

01:05:45.150 --> 01:05:49.870
<v Victor>And they say, oh, this is only nightly and I can't go in production with it.

01:05:50.010 --> 01:05:58.110
<v Victor>And maybe we're actively working here to drive some of the stuff that we care about.

01:05:58.110 --> 01:06:06.150
<v Victor>But I think in general, as a community, is more deliberate paths to moving proposals

01:06:06.150 --> 01:06:10.870
<v Victor>along and sort of stabilizing stuff that's been true or stuff that has been

01:06:10.870 --> 01:06:12.430
<v Victor>vetted in industry that works,

01:06:12.650 --> 01:06:16.870
<v Victor>not just on our side, but many other companies were sort of vetting the stuff

01:06:16.870 --> 01:06:18.370
<v Victor>and say, okay, this works for us.

01:06:19.450 --> 01:06:23.090
<v Victor>Sort of making, maybe making more deliberate push to stabilize stuff.

01:06:23.090 --> 01:06:28.870
<v Victor>Because there are some things that have been in Nightly for years and nowhere near stabilized.

01:06:29.970 --> 01:06:35.270
<v Matthias>I completely understand what you mean here. A lot of, let's say,

01:06:35.730 --> 01:06:42.410
<v Matthias>really helpful features are stuck in Nightly or even in the RFC stage or somewhere

01:06:42.410 --> 01:06:45.010
<v Matthias>in between. So, yeah, I fully understand.

01:06:45.210 --> 01:06:50.630
<v Victor>But work doesn't get done by itself. So we need volunteers to drive these things.

01:06:50.630 --> 01:06:53.190
<v Victor>And we're trying to do our part as best as we can.

01:06:53.350 --> 01:06:56.890
<v Victor>But the more people are reviewing PRs and RFCs, the better.

01:06:58.850 --> 01:07:03.250
<v Victor>So it's a community effort. It truly is.

01:07:04.810 --> 01:07:11.670
<v Matthias>True. Anyhow, we're getting close to the end. So it's not all flowers and roses, obviously.

01:07:11.930 --> 01:07:18.810
<v Matthias>But it feels like, in general, what would you say? How would you summarize Rosted

01:07:18.810 --> 01:07:20.810
<v Matthias>Microsoft in the beginning of 2025?

01:07:21.310 --> 01:07:22.950
<v Matthias>What would be the mantra?

01:07:24.210 --> 01:07:27.590
<v Victor>It's the, no bullshit about it.

01:07:27.910 --> 01:07:31.630
<v Victor>It's literally what we're calling it inside, at least on my team,

01:07:31.770 --> 01:07:36.890
<v Victor>who's responsible to drive this, is 2025 is the year of Microsoft,

01:07:37.390 --> 01:07:38.610
<v Victor>the year of Rusted Microsoft.

01:07:38.910 --> 01:07:41.210
<v Victor>So literally this is what we're calling it.

01:07:41.670 --> 01:07:49.150
<v Victor>It's the year where we need to solve enablement across the board for Rusted Microsoft.

01:07:49.470 --> 01:07:56.250
<v Victor>So we're all in on making that happen and providing all the tools and filling all the gaps.

01:07:56.470 --> 01:08:02.590
<v Victor>So although it's a lot of work and not to lie, it's not easy and a lot of moving

01:08:02.590 --> 01:08:05.810
<v Victor>pieces, people are very excited about this.

01:08:06.130 --> 01:08:09.970
<v Victor>Both teams who are waiting on us to deliver the stuff that we promised.

01:08:10.250 --> 01:08:15.030
<v Victor>But even on our side, we're super excited to unblock all these teams because

01:08:15.030 --> 01:08:19.130
<v Victor>I'm looking at the projects and I'm seeing internally using Rust.

01:08:19.550 --> 01:08:26.590
<v Victor>I can't but get excited I see all this interesting stuff going on and it's just

01:08:26.590 --> 01:08:31.690
<v Victor>a shame to see them block on some missing tool or something that just doesn't

01:08:31.690 --> 01:08:34.630
<v Victor>really work for them and I want to solve that problem,

01:08:35.590 --> 01:08:41.750
<v Victor>I very much see myself as unblocking them to do really cool stuff Can you give.

01:08:41.750 --> 01:08:48.830
<v Matthias>Us a quick teaser maybe of a thing that is on the midterm horizon that people

01:08:48.830 --> 01:08:50.730
<v Matthias>might be looking forward to?

01:08:52.500 --> 01:08:56.300
<v Victor>Debugging Rust on Windows will become really better.

01:08:57.580 --> 01:08:59.980
<v Matthias>Wow, that's good to hear.

01:09:00.160 --> 01:09:03.260
<v Victor>And maybe that's because it really sucks right now.

01:09:04.060 --> 01:09:07.520
<v Matthias>That's what I meant with honesty in the beginning. Yeah, I appreciate it.

01:09:08.200 --> 01:09:12.880
<v Matthias>So it feels like Microsoft is all in when it comes to Rust.

01:09:13.320 --> 01:09:17.780
<v Matthias>Definitely. So you're kind of making it succeed.

01:09:18.000 --> 01:09:23.280
<v Matthias>Or I would say, could you say Microsoft devs love Rust? could you say that.

01:09:23.280 --> 01:09:26.200
<v Victor>All the devs that

01:09:26.200 --> 01:09:29.260
<v Victor>i talk to love rust because they they come to

01:09:29.260 --> 01:09:32.660
<v Victor>us for rusty things so they

01:09:32.660 --> 01:09:38.820
<v Victor>they're all super excited and they love it there's there's no rust haters at

01:09:38.820 --> 01:09:45.600
<v Victor>least not that i'm seeing everyone that comes to us they they come with passion

01:09:45.600 --> 01:09:50.020
<v Victor>and they want they want us to help them so.

01:09:50.020 --> 01:09:53.820
<v Matthias>Traditionally our last question is what's your

01:09:53.820 --> 01:09:59.920
<v Matthias>message to the rust community could be anything about the community about technology

01:09:59.920 --> 01:10:07.220
<v Matthias>i mean you have a very strong c++ background you told me that you go to cpp

01:10:07.220 --> 01:10:10.180
<v Matthias>conf almost like since the very beginning if i'm.

01:10:10.180 --> 01:10:12.220
<v Victor>Not mistaken so.

01:10:12.220 --> 01:10:17.620
<v Matthias>Maybe maybe this would be an interesting angle to come from to say okay from

01:10:17.620 --> 01:10:22.100
<v Matthias>your personal perspective as someone who is very involved in c++ and has a lot

01:10:22.100 --> 01:10:27.200
<v Matthias>of experience what would be your message to the rust community it's.

01:10:27.200 --> 01:10:30.420
<v Victor>A message both for rust community and for c++

01:10:30.420 --> 01:10:33.380
<v Victor>community it's in order for us

01:10:33.380 --> 01:10:36.360
<v Victor>to succeed c++ does not

01:10:36.360 --> 01:10:39.860
<v Victor>mean it has to die so it's not

01:10:39.860 --> 01:10:44.040
<v Victor>a zero-sum game it's very much about many many

01:10:44.040 --> 01:10:48.720
<v Victor>years from now where we need to learn to coexist both

01:10:48.720 --> 01:10:52.080
<v Victor>in terms of software interop and

01:10:52.080 --> 01:10:55.080
<v Victor>in terms of community interop so i think

01:10:55.080 --> 01:11:02.300
<v Victor>my message would be let's spend more time on improving these bridges and and

01:11:02.300 --> 01:11:08.720
<v Victor>making sure the languages work well together so that we can successfully have

01:11:08.720 --> 01:11:12.800
<v Victor>this and as communities learn to collaborate better. Awesome.

01:11:13.140 --> 01:11:18.760
<v Matthias>Yeah, I would love to see that. Victor, thanks so much. I really appreciate

01:11:18.760 --> 01:11:20.880
<v Matthias>you taking the time today. Thank you so much.

01:11:21.160 --> 01:11:22.500
<v Victor>Thanks for having me. Bye-bye.

01:11:23.360 --> 01:11:27.080
<v Matthias>Rust in Production is a podcast by corrode. It is hosted by me,

01:11:27.360 --> 01:11:30.140
<v Matthias>Matthias Endler, and produced by Simon Brüggen.

01:11:30.400 --> 01:11:34.600
<v Matthias>For show notes, transcripts, and to learn more about how we can help your company

01:11:34.600 --> 01:11:37.480
<v Matthias>make the most of Rust, visit corrode.dev.

01:11:37.680 --> 01:11:40.960
<v Matthias>Thanks for listening to Rust in Production.