Microsoft's Open Source Journey
This is a modal window.
Das Video konnte nicht geladen werden, da entweder ein Server- oder Netzwerkfehler auftrat oder das Format nicht unterstützt wird.
Formale Metadaten
Titel |
| |
Untertitel |
| |
Alternativer Titel |
| |
Serientitel | ||
Anzahl der Teile | 561 | |
Autor | ||
Lizenz | CC-Namensnennung 2.0 Belgien: Sie dürfen das Werk bzw. den Inhalt zu jedem legalen Zweck nutzen, verändern und in unveränderter oder veränderter Form vervielfältigen, verbreiten und öffentlich zugänglich machen, sofern Sie den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen. | |
Identifikatoren | 10.5446/44451 (DOI) | |
Herausgeber | ||
Erscheinungsjahr | ||
Sprache |
Inhaltliche Metadaten
Fachgebiet | ||
Genre | ||
Abstract |
|
00:00
Open SourceMicrosoft dot netProgrammErwartungswertComputeranimation
00:34
SoftwareentwicklerOpen SourceDatenfeldWald <Graphentheorie>VerzerrungstensorComputeranimation
01:35
BildschirmfensterMicrosoft dot netOpen SourceVersionsverwaltungGemeinsamer SpeicherNewsletterFreewareStandardabweichungGleitendes MittelCLIÄhnlichkeitsgeometrieCompilerAppletÜbersetzer <Informatik>Virtuelle MaschineSoftwareplattformProgrammCodeHochdruckPhysikalisches SystemDrahtloses lokales NetzLeistung <Physik>AnwendungsdienstanbieterWeb-SeiteSpeicherabzugActive Server PagesOrdnung <Mathematik>Open SourceVollständiger VerbandAnwendungsdienstanbieterMicrosoft dot netProzess <Informatik>DefaultGüte der AnpassungOffene MengeVersionsverwaltungMaschinenschreibenAuswahlaxiomEndliche ModelltheorieSichtenkonzeptBenutzerbeteiligungKontextbezogenes SystemCodeTropfenROM <Informatik>Computeranimation
03:44
SoftwareentwicklerMicrosoft dot netSpeicherabzugDienst <Informatik>Mobiles InternetSoftwareplattformFramework <Informatik>SpeicherabzugElektronische PublikationProjektive EbeneTermMicrosoft dot netTexteditorE-MailTopologiePhysikalisches SystemInstallation <Informatik>ZeichenketteHalbleiterspeicherOpen SourceGoogolCoprozessorApp <Programm>BimodulKartesische KoordinatenVirtuelle MaschineUmwandlungsenthalpieFramework <Informatik>SpeicherbereinigungInformatikBildschirmfensterServerQuellcodeRegulärer Ausdruck <Textverarbeitung>Dienst <Informatik>DifferenteSchreiben <Datenverarbeitung>Shape <Informatik>MereologieMultiplikationsoperatorCodeDiagrammMini-DiscSoftwareSchreib-Lese-KopfSampler <Musikinstrument>Minkowski-MetrikDomain <Netzwerk>Differenz <Mathematik>Wort <Informatik>SoftwareentwicklerFamilie <Mathematik>DämpfungPerspektiveEin-AusgabeBitUML
09:00
Mobiles InternetMicrosoft dot netSpeicherabzugFramework <Informatik>SoftwareplattformDienst <Informatik>Open SourceBildschirmmaskeTouchscreenPhysikalisches SystemPunktEinfach zusammenhängender RaumTaskBildschirmfensterDatentypAssoziativgesetzLeistung <Physik>SpielkonsoleTemplateATMDickeGebäude <Mathematik>GruppenoperationProzess <Informatik>ProgrammVerzeichnisdienstVersionsverwaltungFehlermeldungLogischer SchlussMessage-PassingGrundsätze ordnungsmäßiger DatenverarbeitungMicrosoft dot netTypentheorieRechter WinkelPunktwolkeSoftwaretestSpielkonsoleWort <Informatik>TouchscreenApp <Programm>CodeVorzeichen <Mathematik>NP-hartes ProblemGebäude <Mathematik>Zentrische StreckungBenchmarkComputeranimation
11:08
Microsoft dot netElektronische PublikationOffene MengeVersionsverwaltungProgrammComputervirusFontZoomMereologieDiskrete-Elemente-MethodeSpeicherabzugSoftwareentwicklerMicrosoft dot netComputeranimation
11:42
OvalSoftwareentwicklerVisuelles SystemElektronische PublikationCodePhysikalisches SystemKeller <Informatik>ProgrammHydrostatikOffene MengeBildschirmsymbolTouchscreenRechter WinkelZoomMixed RealityDisassemblerPortabilitätVerschiebungsoperatorSystemaufrufLastBildschirmfensterZeichenketteMicrosoft dot netLeistung <Physik>MereologiePhysikalisches SystemMAPFramework <Informatik>SpeicherabzugVisualisierungSpielkonsoleGeradeSoftwareCASE <Informatik>Keller <Informatik>PunktComputeranimation
13:56
VerzeichnisdienstMicrosoft dot netDickeATMProgrammbibliothekTemplateGruppenoperationProzess <Informatik>Klasse <Mathematik>Gebäude <Mathematik>Physikalisches SystemProgrammbibliothekKlasse <Mathematik>Arbeit <Physik>Microsoft dot netRechter WinkelProgrammierumgebungPrinzip der gleichmäßigen BeschränktheitBildschirmfensterComputeranimation
14:36
SCI <Informatik>PortscannerZeichenketteVerzeichnisdienstDickeATMProgrammFormation <Mathematik>SpielkonsolePhysikalisches SystemElektronische PublikationHill-DifferentialgleichungBootenBildschirmfensterDiskrete-Elemente-MethodeProgrammbibliothekComputeranimation
15:28
Microsoft dot netGebäude <Mathematik>VersionsverwaltungSpeicherabzugMessage-PassingLogischer SchlussCILProzess <Informatik>Strom <Mathematik>VerzeichnisdienstATMDickeProgrammOffene MengeProjektive EbeneMicrosoft dot netElektronische PublikationÄquivalenzklasseDemo <Programm>Güte der AnpassungBitProzess <Informatik>Programm/QuellcodeComputeranimation
16:18
VerzeichnisdienstMicrosoft dot netProgrammDickeATMSpeicherabzugAnwendungsdienstanbieterTemplateProzess <Informatik>GruppenoperationGebäude <Mathematik>Elektronische PublikationSichtenkonzeptOffene MengeLokales MinimumURNHIP <Kommunikationsprotokoll>Hardware-in-the-loopMicrosoft dot netCodeBenutzerbeteiligungFuzzy-LogikProgrammbibliothekProgramm/QuellcodeJSON
17:01
Gebäude <Mathematik>Microsoft dot netCodeGruppenoperationProzess <Informatik>SpeicherabzugTemplateAnwendungsdienstanbieterVerschiebungsoperatorInformationGruppenkeimMetropolitan area networkAdressraumDatenmissbrauchBrowserGraphische BenutzeroberflächeInternetworkingBenutzerbeteiligungCASE <Informatik>BildschirmfensterProgramm/QuellcodeComputeranimation
17:58
VerzeichnisdienstATMDickeWeb-SeiteProgrammMicrosoft dot netProgrammbibliothekMicrosoft dot netMAPHumanoider RoboterStandardabweichungBildschirmfensterDifferenteDesign by ContractSystemaufrufDämpfungPhysikalisches SystemExistenzaussageSoftware Development KitNamensraumRahmenproblemElektronische PublikationCASE <Informatik>NeuroinformatikBruchrechnungPunktwolkeBenutzerbeteiligungProgramm/QuellcodeComputeranimation
19:58
VariableProgrammierumgebungBenutzerbeteiligungBildschirmfensterArithmetisches MittelVideokonferenzWort <Informatik>FrequenzComputeranimation
20:51
VerzeichnisdienstComputervirusSpielkonsoleServerInternetworkingWort <Informatik>Kartesische KoordinatenBenutzerbeteiligungMicrosoft dot netComputervirusComputeranimation
21:43
ProgrammKlasse <Mathematik>SpielkonsolePhysikalisches SystemDatentypIndexberechnungDateisystemTouchscreenZeiger <Informatik>BrowserKartesische KoordinatenComputervirusGüte der AnpassungVererbungshierarchieMobiles EndgerätCodeVisualisierungNintendo Co. Ltd.Gebäude <Mathematik>KonfigurationsraumMicrosoft dot netPhysikalisches SystemProgramm/QuellcodeComputeranimation
22:45
VerzeichnisdienstKlasse <Mathematik>ATMDickeMicrosoft dot netProzess <Informatik>GruppenoperationGebäude <Mathematik>Inklusion <Mathematik>ComputervirusBenutzerbeteiligungCodeMicrosoft dot netWeb-ApplikationDiskrete-Elemente-MethodeComputervirusComputeranimationFlussdiagrammProgramm/QuellcodeJSON
23:33
Gebäude <Mathematik>Microsoft dot netCodeGruppenoperationProzess <Informatik>Inhalt <Mathematik>Kartesische KoordinatenSondierungComputervirusSoundverarbeitungMicrosoft dot netLesezeichen <Internet>SchlüsselverwaltungBenutzerbeteiligungWeb-ApplikationOrtsoperatorVerschiebungsoperatorProgramm/QuellcodeComputeranimation
24:15
Web SiteSpeicherabzugSkriptspracheMaßerweiterungDatentypProgrammfehlerIndexberechnungFramework <Informatik>RuhmasseBildschirmsymbolMicrosoft dot netBrowserBenutzerbeteiligungProzess <Informatik>Kontextbezogenes SystemMobiles EndgerätInternetworkingCodeGraphische BenutzeroberflächeVirtuelle MaschineBildschirmfensterMultiplikationsoperatorPunktLaufzeitfehlerVirtualisierungComputeranimationXML
25:21
SondierungCodeDiskrete-Elemente-MethodeRechenwerkComputervirusEmulationVersionsverwaltungServerMicrosoft dot netBildschirmmaskeProgrammierumgebungOpen SourcePatch <Software>App <Programm>MAPInternetworkingCodeBildschirmfensterLeistung <Physik>Computeranimation
26:12
ComputervirusSondierungSpeicherabzugMicrosoft dot netBildschirmfensterDebuggingOpen SourceBildschirmmaskeKeller <Informatik>App <Programm>TopologieVirtuelle MaschineSchlüsselverwaltungCompilerEndliche ModelltheorieComputeranimation
27:49
HydrostatikElektronische PublikationStreaming <Kommunikationstechnik>SpeicherabzugPhysikalisches SystemInternetworkingStellenringOffene MengeVisuelles SystemÜberschallströmungKlon <Mathematik>CodeLokales MinimumSpieltheorieWidgetCliquenweiteOvalFunktion <Mathematik>Innerer PunktSichtenkonzeptBildschirmfensterMaßerweiterungGebäude <Mathematik>HilfesystemABEL <Programmiersprache>ZählenKartesische KoordinatenBildschirmmaskeBildschirmfensterSpieltheorieHalbleiterspeicherApp <Programm>BildschirmsymbolSystemplattformMathematische LogikPortabilitätMicrosoft dot netStandardabweichungComputeranimation
28:34
HydrostatikElektronische PublikationPhysikalisches SystemFramework <Informatik>SpeicherabzugFontStreaming <Kommunikationstechnik>Visuelles SystemOffene MengeSoftwareentwicklerBildschirmfensterPrimzahlzwillingeFunktion <Mathematik>DatentypParametersystemSpielkonsolePlastikkarteInhalt <Mathematik>VolumenvisualisierungProgrammSpieltheorieHomepageCodeSystemplattformMathematische LogikObjekt <Kategorie>Projektive EbenePlastikkarteDifferenteBildschirmfensterSpieltheorieBrowserProgramm/QuellcodeXMLComputeranimation
29:08
HomepagePlastikkarteSpieltheorieBildschirmfensterApp <Programm>BildschirmmaskeBrowserBitmap-GraphikBitSystemplattformBasis <Mathematik>SystemaufrufBenutzerbeteiligungStandardabweichungTeilbarkeitTopologieCASE <Informatik>Rechter WinkelOffice-PaketPortabilitätMicrosoft dot netComputeranimation
30:25
Funktion <Mathematik>ProgrammOvalParametersystemVolumenvisualisierungInhalt <Mathematik>Offene MengeSpielkonsoleDatenmissbrauchPlastikkarteCodeRechenbuchEreignishorizontOpen SourceFunktionalQuellcodeGeradeSpieltheorieStandardabweichungMicrosoft dot netComputeranimation
31:05
HydrostatikElektronische PublikationStreaming <Kommunikationstechnik>SpeicherabzugFramework <Informatik>KegelschnittVirtuelle MaschineDifferenteComputersicherheitPi <Zahl>CASE <Informatik>ComputeranimationProgramm/Quellcode
31:57
HydrostatikElektronische PublikationPhysikalisches SystemFramework <Informatik>FontStreaming <Kommunikationstechnik>LoginSoftwareProgrammDistributionenraumTermDefaultPasswortComputersicherheitDatensichtgerätFächer <Mathematik>Persönliche IdentifikationsnummerVirtuelle MaschineProdukt <Mathematik>Umsetzung <Informatik>ComputeranimationProgramm/Quellcode
32:48
LoginPhysikalisches SystemSoftwareProgrammPasswortDefaultComputersicherheitDistributionenraumTermElektronische PublikationMigration <Informatik>Wurzel <Mathematik>TaskMenütechnikHauptidealringCachingLineares zeitinvariantes SystemMaximum-Entropie-MethodeBefehlsprozessorRegistrierung <Bildverarbeitung>NummernsystemDienst <Informatik>AggregatzustandVersionsverwaltungRechter WinkelPi <Zahl>Produkt <Mathematik>Office-PaketBildschirmfensterDatenverwaltungSchlüsselverwaltungInstallation <Informatik>Computeranimation
33:26
Wurzel <Mathematik>Migration <Informatik>Physikalisches SystemTaskCachingBefehlsprozessorMaximum-Entropie-MethodeHauptidealringDiagrammProgrammDialektElektronische PublikationSichtenkonzeptHochdruckInternet der DingeSpeicherabzugMicrosoft dot netZellulares neuronales NetzGamecontrollerSummierbarkeitOffene MengeCodeSpeicherabzugMicrosoft dot netVisualisierungRechter WinkelPhysikalisches SystemMereologieTreiber <Programm>MAPChirurgie <Mathematik>StandardabweichungOpen SourcePersönliche IdentifikationsnummerQuellcodeComputeranimationProgramm/Quellcode
34:26
VisualisierungKartesische KoordinatenMicrosoft dot netARM <Computerarchitektur>CodeDebuggingUmwandlungsenthalpieLaufzeitfehlerComputeranimation
35:04
Persönliche IdentifikationsnummerTaskProgrammSichtenkonzeptOffene MengeInternet der DingeSpielkonsoleMarketinginformationssystemRechenwerkZellularer AutomatHochdruckSystemaufrufGeradeSchlüsselverwaltungBaum <Mathematik>TopologieDebuggingVisualisierungKontrollstrukturPunktPortabilitätElektronische PublikationBefehlsprozessorProgramm/Quellcode
35:43
StellenringProgrammHochdruckZeichenketteVariableComputerarchitekturGanze FunktionKontextbezogenes SystemAnalogieschlussCoprozessorBildschirmfensterARM <Computerarchitektur>Gebäude <Mathematik>VariableUmwandlungsenthalpieVisualisierungCodeProgramm/QuellcodeComputeranimation
36:23
SichtenkonzeptElektronische PublikationHochdruckMAPMicrosoft dot netMaximum-Entropie-MethodeBefehlsprozessorHauptidealringWurzel <Mathematik>Migration <Informatik>CachingPhysikalisches SystemTotal <Mathematik>VerzeichnisdienstBinärdatenErschütterungMatrizenrechnungPi <Zahl>MatrizenrechnungDemo <Programm>Microsoft dot netProgramm/Quellcode
37:03
Reelle ZahlMikrocomputerProzess <Informatik>ProgrammiergerätMikrocontrollerLeistung <Physik>ViereckSupercomputerPunktCoprozessorRechter WinkelVorzeichen <Mathematik>ComputeranimationBesprechung/Interview
37:49
SpielkonsoleProgrammHochdruckHilfesystemSichtenkonzeptThreadATMOvalAggregatzustandGebäude <Mathematik>DatenmodellLipschitz-StetigkeitDigitale PhotographieRelativitätstheorieMicrosoft dot netDigitale PhotographieBesprechung/InterviewProgramm/QuellcodeComputeranimation
38:23
SoftwareentwicklerNetzbetriebssystemJensen-MaßWhiteboardMikrocontrollerBootenVerschlingungMikrocomputerFirmwareVersionsverwaltungMicrosoft dot netSoundverarbeitungMikrokernelE-MailRechter WinkelNichtlinearer OperatorVisualisierungBesprechung/InterviewComputeranimation
39:30
AggregatzustandGebäude <Mathematik>DatensichtgerätTablet PCThreadSpielkonsoleLuenberger-BeobachterLoopVisualisierungServerOpen SourceTouchscreenBildschirmfensterRhombus <Mathematik>NetzbetriebssystemSystemprogrammLeistung <Physik>VideokonferenzBootenSpannungsmessung <Mechanik>Virtuelle MaschineApp <Programm>Einfache GenauigkeitCASE <Informatik>Rechter WinkelCodeNeuroinformatikTaskVerschlingungComputeranimation
41:34
DatentypFehlermeldungKonfigurationsraumVersionsverwaltungCachingSpeicherabzugInformationCliquenweiteSchnittmengeServerMathematikEinfach zusammenhängender RaumUnendlichkeitVerschlingungSkalarproduktGanze FunktionNetzbetriebssystemPersönliche IdentifikationsnummerTouchscreenFirmwareBildschirmfensterComputeranimation
42:12
InformationSchnittmengeBildschirmfensterDigitale PhotographieAggregatzustandGebäude <Mathematik>DatensichtgerätIntelBaum <Mathematik>CliquenweiteEinfach zusammenhängender RaumServerCachingMathematikMicrosoft dot netBitSampler <Musikinstrument>Kontextbezogenes SystemCodeJust-in-Time-CompilerMultiplikationsoperatorApp <Programm>InformatikDigitale PhotographieInterpretiererGenerizitätComputeranimationProgramm/Quellcode
43:07
BildschirmfensterPi <Zahl>ZufallszahlenGebäude <Mathematik>OvalDatensichtgerätAggregatzustandInklusion <Mathematik>Hill-DifferentialgleichungMicrosoft dot netMikrocontrollerOpen SourceCodeCompilerPunktwolkeVisualisierungComputeranimation
44:18
GeradeAggregatzustandBildschirmfensterHochdruckMicrosoft dot netMultiplikationsoperatorMinkowski-MetrikVersionsverwaltungVorlesung/KonferenzComputeranimationBesprechung/Interview
44:54
Computeranimation
Transkript: Englisch(automatisch erzeugt)
00:05
All right. Hey, friends. Hey. Hey. Lower your expectations now. If I get any of this to compile, I'm going to consider that a personal success.
00:22
If it works and everything works as it's supposed to, then that'll be a miracle. So just expect nothing, and you will not be disappointed. Because I have no idea what I'm doing, which is fine. Also, a little advertisement. I have a podcast. I've had one for 13 years. It's a non-denominational podcast.
00:42
I have all kinds of cool open source people. I've had over 600 episodes of it. It's only 30 minutes long. Check it out. It's a good show. I work here. But I don't actually work in Seattle. I work in Portland, which is kind of like the forest moon outside the tractor beam in the reality distortion
01:02
field. And I originally worked in open source outside of Microsoft, and for many years did open source 10 years ago. And I went to Microsoft explicitly to open source everything or be fired for open sourcing everything. So if I've been fired, it either means I've made a mistake and been fired,
01:21
or I open source something I wasn't supposed to and I've been fired, or it's all open and I have nothing to do. When I went there, people said I was a sellout, though, because I was in open source. And then I went to Microsoft, and it really hurt my feelings. I didn't really know how to feel about that, but somehow I was able to work through those feelings
01:40
because this is me before Microsoft. This is me after Microsoft. It's been quite a ride. Now, you know that we open source .net. You may have heard about this, that we open source .net. Did you know that we open source .net almost 20 years ago?
02:00
And we did a shitty job of it. We actually just zipped it up, took all the good stuff out of it, and put in a problematic license. And we said, hey, we open source .net. Look, don't touch it. Just look. Look at the .net. But a couple of things didn't exist when we did that. What didn't exist?
02:21
Git, the social web, a large choice of licenses, lots of problems, the organizational willpower, not being pure evil. These are all things that we needed to work through in order to make successful open sourcing of .net happen. We actually did this, and we called it Rotor.
02:41
And it was basically a read-only drop of .net, and it caused things like Mono to be made because it was a minefield that we didn't want people to go into. And I went there in about 2008, and we created ASP.net MVC, the model view controller version of ASP.net. I wanted to call it .net on nails, but I was told not to.
03:03
It would have been a way better name. And as we open sourced more and more and more stuff, we slowly trained the legal department at Microsoft to say yes by default instead of no by default. Now we actually have to have meetings to talk about why not to open source stuff.
03:20
We have to convince people, ah, you really shouldn't open source that. Why, has it got a secret patent? Well, no, it's just shitty code, and no one should ever see it. But everything's open by default. And what's great is that the stack that I work on is open sourced all the way to the metal. And I'm gonna talk about what that means, what the metal means in that context, and what it means to take something open sourced
03:41
all the way down. Right now, about 60% of the contributions to the core framework are outside of Microsoft, with the Googles and the Samsons and people like you bringing that code in. So more people work on .net outside than work on it inside, which is really exciting. Now this is a diagram with some bombs
04:00
that Microsoft have dropped on various countries that marketing told me to put in. These are contributions to .net in 2015, 2016, and then in 2018, .net finally destroyed New Zealand, which has been my secret goal. And the other exciting thing about this chart
04:21
is the people that are actually contributing to the .net source code from boats actually on a boat moving this way. This is either a boat or zero comma zero. I'm not sure. It's possible it could be zero comma zero. Actually, my data could be all bad. Now, we say .net, .net, .net,
04:41
like it's this word, it's this marketing term that Microsoft has used for so many years. But how dare Microsoft take over a top-level domain? Like what if we called it .org? You think anyone would have allowed that? Who would have the audacity to name something .net? It's so offensive that they would just do that. It would be like as if you took an editor
05:01
and just called it code. Modern Microsoft would never do that because it would be too audacious. .net now is not a thing that you can touch and point to on the disk and say, look, that's where we installed .net. In the past, it used to be C colon backslash Windows backslash Microsoft, da, da, da, da, da, da.
05:23
And you would be afraid of it. People live in fear of .net because it moved slow, it became part of Windows, and updating it was problematic. You'd have to go and reboot the machine. And you'd have situations where somebody would be on .net 4 and they've got a great app and it runs their business
05:40
and they just don't wanna touch it. They don't wanna piss it off. And then someone else would come out and say, I'm gonna build my app in the new .net 4.8. It's gonna be great. They get the application working and then they wanna update the server and the people who own the server are afraid. They don't wanna bother, eh, it works. Can we just not anger it?
06:01
And then that person then gets angry, quits the company, becomes a node developer, and then they're lost inside of node modules and we never hear from them again. What we need is a .net that can be side by side, that can be flexible, can have self-contained installations. We need multiple .nets. We need plural .nets.
06:20
So Microsoft made the .net framework, which is on Windows, and then .net core, which was originally planned for cross-platform services. Now, all the while, because of problematic licensing and patenting and stuff, Miguel and friends decide to make a clean room re-implementation of .net.
06:41
Clean room re-implementation. Clean room means they can't look at the source and re-implementation means that one day, Miguel and friends went file new project. It was totally in a clean room. I assume they had no pants on and they were just on a non-networked machine and they said file new project. How did they do that, though?
07:00
They knew what .net looked like, but they couldn't look at the code. So they looked at the shape of it. Like if I asked you to write system.string again, I would say, make me a string, it has to work exactly like system.string, it has .contains and .length and .to, all the things strings do, but just don't look at the code. He would write string
07:21
and it would probably work just same as my string. And then I would say, okay, do the same of that for the rest of .net. And you'd have your own system.file, io.file, you'd have your own system.text, regular expressions. You'd build your own jitter, your own garbage collector. All of it in a clean room without looking at any of the bits of .net that were problematic from a license perspective.
07:42
And why did Miguel and friends do that? I guess, Miguel, you wanted to make a mail application and they were like, we're gonna make a mail app, it's gonna compete with the best mail apps, but before we do that, let's write .net over from scratch, it'll be fine. It's amazing, and it turns out you did it and it was nice, and then we bought you, and now there's three .nets.
08:03
Now some people would say, well that's stupid, you're gonna have to kill two of them. Clearly there can be only one, it's like the Highlander, there's only one .net allowed. Except people forget that there's innovation that happens at different times and different ways across the .nets. .net full framework on Windows has cool things happening
08:22
in the jitter and garbage collection space, some really neat computer science happening around 64-bit jitters that use specific new processor instructions. There's speed improvements inside of .net core with span of T and some of the new memory improvements. There's amazing stuff happening on Mono with ahead-of-time compilation, with tree trimming.
08:44
It's all really just one family of .nets and there's no reason that we can't cross-pollinate because now they all have reasonable licenses. We can actually refactor via subtraction, and we can have these things work together, as opposed to fighting with each other.
09:02
So I could theoretically go out to the command line here, and I could go to Scott desktop, make a folder, that's not a right folder. I don't know what that folder is. I don't know what's, there we go, hang on, go away.
09:24
Yeah, see, one of the things that's hard about coding in front of a whole bunch of people is you're looking at me. If you would just look away, that would be great. I type 100 words a minute, but 90 is backspace. So that folder is empty right now,
09:40
so I'm gonna say .net new, and I'm gonna see all the different .nets that I could potentially do. I could make console apps and tests and all kinds of fun stuff. I'm gonna go and I'm gonna say, der, .net new console dash O, we'll call it FOSDEM Con, okay? And I'm gonna go like this,
10:00
I'm gonna go into FOSDEM Con, and see that I've got some code. I'm gonna say .net run, one 1,000, two 1,000, three 1,000, four 1,000. Ew, Microsoft sucks, Microsoft with a dollar sign. That took five seconds, bleh. And then you immediately go and do some other thing, right? That says, and then you're also like, that says low world, not hello world.
10:22
It actually says hello world, it's just cut off on the screen there. Okay, that took too long, right? One 1,000, two 1,000, that's too bad. But in fact, what was going on when I said .net build and .net run, I was building this DLL right here, and if I wanted to say .net that DLL, it in fact runs really fast, right?
10:42
.net run implies restore and build and all the checking. .net run is an SDK thing. .net runs that DLL really, really fast. And now I can do some official benchmarking, and I can prove that that scales, right? Now, I can then put that in a container in Kubernetes,
11:01
and I can do it at cloud scale, containerized hello world, right? Awesome. What's interesting though, is what if I went out to let's see if I did this. What if I went to mono? We'll give mono a tiny font and then zoom in. And then I go to the desktop,
11:20
to Foz Demcon, and I say mono that DLL. That's the LL part of DLL, and that worked. Mono doesn't know about .net core. How is that possible, right? Well, it's because it's using IL, so if I go and open up a developer command prompt,
11:42
and I run ILDASM, the IL disassembler, and the title of my mix tape, ILDASM, and I can say file open. I'm gonna open up that DLL right here, and we're gonna say, hey, Foz Demcon, zoom, zoom, zoom. Someone actually drew that icon in the late 80s,
12:01
and they did not know it would be this big on the screen. And then I can see this here. I can see the IL. Now, IL is a really interesting thing because, effectively, C sharp is apples. IL is applesauce, and it then turns into apple juice. This is the applesauce stage of our software.
12:21
The really interesting part is that I can also take oranges, like Visual Basic, or kumquats, like F sharp, and they also turn into applesauce. That's a whole other talk. What's interesting about it, though, is that we've got no op, load a string into the stack,
12:43
call system.console, that write line, then no op and then read, and then that's it. There's nothing in there that says Windows. There's nothing in there that says anything. We don't even know where this came from. Additionally, it's calling system.console, but we don't really think about who's system.console.
13:01
It depends on which framework you ran it in, whether you ran it in monos, and then they ran system.console, or whether you ran it in Windows, or whether you ran it in the crossplatform.net. This is a thing that, probably not people at FOSDEM, but people outside forget about, is at some point, somebody has to call the syscall.
13:24
Windows ultimately has to do that work, or Linux has to do that work, or the container has a syscall that is gonna do that work. Somebody's gotta do that work. We forget what's underneath. We're so used to driving, self-driving cars that we forget about how stick shifts work, and manual shift cars work. When we remember that, a lot of power happens.
13:43
In this case, monosystem.console works just great. Works exactly like .net cores. .net core didn't work just fine, and it went, and it ran no problem. Now, I can go back over here. Let's go back up one layer. Here's FOSDEMCon, and we'll go and say .net new class.
14:03
Did you say class lib, or did you say class lib? Lib or lib? Is it a lib? Do you get books at the library? I'm just saying. I'm just saying. I'm gonna call it lib, and I don't care.
14:20
But you never know, right? It's Europe. We get the books at the library. I'm gonna go here into class one, and we'll call it greeting, and we'll say public. This is not an IDE, and it's not vim. If I ran it in vim, I'd have to reboot Windows to get out, because I don't know how to get out of vim.
14:45
Okay, cool.
15:01
Magical. All right, now, FOSDEMCon, let's go down in there. That one's gonna go and use FOSDEM lib. I'm gonna say var, because it's better,
15:21
and I'm gonna say greeting.hello, and then we'll go and we'll say r, and then this will fail. Because it's never heard of that before, so then I'm gonna go, and I'm gonna do the command line equivalent of right-click, add reference to that previous project, dot net add reference, up to there,
15:43
and then into here, and I'll go and run that. Then it says, oh, this file is open. It's because it's open over here. Close that, and it worked. Okay, no, I don't want your pity applause.
16:00
If I'm gonna get it, I gotta earn it. Okay, so just be like, okay, that's fine. You did hello world. Good job, Microsoft guy. We here at the FOSDEM appreciate a little bit more effort in our demos. Fine. What if I then went out to, let's go dot net new slash o,
16:22
dot net new razor slash o, FOSDEM web, okay, and then we'll go down in there, and then I'll hit that,
16:42
and we'll run code, and that's yummy, and then we're gonna go in here, and let's try using FOSDEM lib. It doesn't feel right. I'm gonna say h1, and we'll say at greeting, dot hello, hello, dot net run.
17:03
Then I will open up competitive browser, and one of the fun things I'm doing with competitive browser is that I have this thing called Bing new tab. It's really great because when you open a new tab in Chrome, you get Bing, but then when you search for something, it uses Google, and what's nice about that
17:23
is it allows you to have the really nice Bing home screen, and then also find things on the internet, which is really fun. Now I just want to point out that in just a few minutes, I've gone and made a cross-platform DLL
17:41
and had it running the exact same DLL shared inside of Mono, Windows, Linux, the web, but you clapped for a Bing joke, so just kind of letting you know that it's a little disappointing, okay? So in this case here, that DLL is interesting. We've been taking that lib, and we've been doing stuff with it all over the place,
18:00
so let's go and say FOSDEM lib, and we'll go and say look at that csproj, and that's cool. What's going on there? It doesn't say Mono, it doesn't say .net, it doesn't say Windows, it says .net standard. .net standard is an agreement. It's an API level agreement. It's like Android API levels.
18:21
With Android, you say I don't want to support that weird phone I've never heard of. I support Android API level 14, and that will allow me to support all of these weird Android phones, and then if I support Android level 16, some of the weird cheap phones fall out and some of the new shiny phones work.
18:40
You decide how many APIs you need. You pick the lowest common denominator, and it allows you to target as many things as possible. The .net standard works the same way. You go and you say hey, I learned how to do system.io.file, and I did that in the web for years, and now I want to work in containers, or I want to work in the cloud,
19:00
or I want to work in an iPhone, I want to work on Android. You expect system.io.file to work, so the .net standard is a contract. It's an agreement that works everywhere, and then anyone can go and do that. You could go and you could take .net, fork it, search and replace all the namespaces, call it scott.net and distribute it,
19:20
and it would work and it would be .net standard compliant. You could write your own .net from scratch and give it that compliance, and as long as you can run .net standard DLLs, it'll work. If I were to put that in a frame, am I having a stroke? No? Is that me? It's not me.
19:42
You ever have that sense where something's beeping and it's like, is it my computer? It's not? Fine, okay. So in this case, as long as the .net standard is implemented, you could put it on any device at all that is written with .net standard. So in this case, I put that DLL on a bunch of different places, but if any of you saw Michaela's excellent talk
20:03
about WebAssembly, WebAssembly becomes really, really interesting. So I'm here in Ubuntu on Windows, because Windows runs Ubuntu and OpenSUSE and all kinds of great stuff. And by the way, to be clear, it is pronounced Ubuntu, period, not Ubuntu.
20:20
Don't ever say that. The reason I know that is my wife is a Zulu. It's a Zulu word, and Ubuntu is the correct way to pronounce it. True story, person at work, I won't say his name, told me it was pronounced Ubuntu. I showed him a picture and a video of Nelson Mandela explaining the meaning of the word Ubuntu.
20:40
And even after seeing the videos, I don't believe it. Fake news. So anyone you know says Ubuntu, smack them. Now, here is hello.c. So there's a C application, and Michaela talked about how you could potentially go and take that. Actually, it works better if you see the whole words.
21:03
There you go. There's a C application that says hello world to the console. We can go and GCC that. Make sure you run GCC, it works great. And then I could go and compile that with M scriptum for safety's and speed's sake. I won't do it. I've already done it. And I've gone and compiled that into the applesauce of the internet,
21:23
which is WebAssembly. It's that middle place. And WebAssembly doesn't care what got compiled to WebAssembly. It just cares that it's applesauce. If you made it out of oranges, it doesn't matter. So I need to go and run that hello.html. So I need a tiny web server. I'm just gonna say .net serve.
21:40
This is gonna make a tiny web server. Port 8080, and then I'm gonna go back out to competitive browser, and I'm gonna say 8080. And there's that. Hello.html. So now I'm running that C application there. That's cool. Now, what's interesting though is when Microsoft was making a cross-platform .net, they were using Visual Studio
22:01
and the Visual Studio build system and some C and C++ isms. That doesn't make it super portable. It's portable. It's just not super portable. However, when Miguel and friends were making Mono, they were like, hey, git clone, apt-get, build essentials, configure, make. Wow, right? Really nice, clean, portable C code.
22:22
What is really nice, portable C code good at doing? Being portable. You could go and compile it on a Nintendo Wii. That's why other technologies use it. That's why Mono's so great, is that places Mono wasn't expected, Mono shows up. Mono's just like that friend. It's like, whoa, I'm here. Ah, you weren't invited.
22:42
What if you compiled that great, wonderful C code into something like WebAssembly? So, what if I went back up here and I said .net new blazor-o fosdemblaze. I'll go and run that, and then we'll go into fosdemblaze.
23:02
And then I'm gonna go and say, add a reference to that lib. And I'll run code. And this looks like I'm back in another one of those web applications, like I was before. And I'm gonna say, using fosdemlib. And I'm gonna say, h2.
23:22
And I'm gonna say, hey, h2. Greeting, God, hello. Hello. That was a Dutch hello, hello. Okay. And then I'm gonna go out here. I'm gonna say .net run, and I'm gonna wonder if something else is on that port already. Pause for effect.
23:42
Thinking about shutting other things down that might be on port 5000. It's not. Port 5000's my favorite port. Boop, okay. This DLL shows up in another web app, yay. Hit F12. Hit F12 again, because the F key
24:01
is always in the wrong position. Much like a USB port, you only ever get the F lock right once or twice a month. It's always wrong. Then I'm gonna hit Shift-F5. And I'm gonna go in here. And I'm gonna say, what?
24:21
There's mono. And there's that DLL. So that .net standard DLL is now running inside of the browser. Did I compile that DLL for WebAssembly? No. I delivered it, just literally did an HTTP get and got that binary and it is being executed
24:42
in the context of the browser. Who's doing the work? That lovely portable C code for mono with a lot of work and a lot of engineering magic compiled in the WebAssembly so I'm running a runtime, a CLR, inside of the V8 virtual machine, inside of the process or the 6,000 processes
25:01
that Chrome spawns inside of Windows or my iPhone or my Android phone or whatever because WASM is already on your machine. Now at this point you might be like, hey Microsoft guy, you're trying to sell me server-light again and I already said no thank you. Except this is the internet. This is the open web.
25:20
This is WebAssembly sitting on top of HTML. Microsoft didn't kill server-light, the internet killed server-light. This whole stack all the way down is open source and that's really exciting. And then for .net people who are just getting into this environment, for them to go and take an existing DLL or an existing code base
25:41
and be able to reuse that is super powerful. Now let's pop all the way off the stack to the beginning of the thing when we were talking about that original .net, 10 year old, 15 year old .net that maybe people are afraid of. Maybe they're writing WinForms apps or WPF apps and they write it on Windows
26:01
and somebody says, hey I want to install my Windows Forms app because it runs the company and then we have to say, well you have to install this version of .net first and this patch level and then reboot, da da da da. Well there is a Windows .net, it's built into Windows and it's very stable. But if you want to go and do daily builds,
26:21
your own private fork of C Sharp, your own compiler, WinForms and WPF, we open source those too. How would you do that? Well what you would do is you'd take Windows Forms and you'd do a brain transplant. You'd take your 15 year old app and you'd put the brand new .net core three underneath it, then you'd have a fully open source stack
26:40
on that front end and you'd be able to put it all in one folder and then theoretically even turn it into a single executable. Now you might say, gee, why do I want two and a half gigs of .net into a single folder? That would be not awesome and now you're saying you'll zip it up? No. What you'll do then is apply some of the other tools available to you like the great tree trimmer from Mono.
27:03
Mono's got this tree trimmer where you would take your app, you'd hang it where you've got all the methods and all the dependencies and you give it a good shake and the methods you're not using fall off. So then you just ship the methods that you are using and you can have a whitelist where you can add in
27:22
other things if you're doing dynamic loading and then I can get a .net core installation down to 30 megs and run it in a Docker container. Now it all depends on what you're doing and how much work you want to put into it but then I could put this onto a USB key and I could run it on a machine without having to worry about dependencies and that's when things
27:41
start getting really interesting. But that doesn't really make me feel like I'm doing damage or I'm doing anything really amazing. So what could we do that would be really amazing? Let me load up an application that is a very old Windows Forms app. So this is like a 15 year old app for like
28:00
a memory matching game and basically this is like a WinForms app that brings up a grid and then I'll just pick the icons from this app. Da da da da da. There we go. This is a very old app, okay? The logic, I'm not very good at it either apparently, the logic behind this is a .net standard DLL.
28:22
You just take that and you factor everything out and you make it platform agnostic, platform nonspecific. So then, what could we do? How much of that code could we get running on an alternate platform? How much of that could I get running literally anywhere else than Windows?
28:43
So we'll go and we'll open that up in a different project that I've got going here. And then I'm gonna go ahead and run that. And what we've done is we've gone and taken the logic of that game, so what it takes to win and all that kind of stuff and made it abstract so that things like clicks call out to this card object
29:06
and now I'm gonna run it in the browser and that is a 15 year old Windows Forms app now running in the browser using open technologies all the way down, so that's interesting. Now, is that, are you gonna clap for that? All right, we'll clap for that.
29:25
Now, that might mean that you may be at FOSDEM but you may also be paying the bills with a Windows Forms app back at the office, right? And you may be thinking, wow, so that means that both of the people who have well factored Windows Forms apps can go and do this.
29:42
Well yeah, there does require a little bit of factoring in the sense of everything had to be platform agnostic. Remember when we talked about all of those calls to native things, right? If you decide to go and new up a bitmap and your platform doesn't have bitmaps, you gotta think about that. Ultimately somebody's calling C,
30:01
ultimately somebody's calling the platform, so you wanna make sure that platform supports it. In this case, I'm using the .NET standard as my basis and then these things, instead of being graphics in a tree inside of Windows Forms, they are divs inside of a DOM inside of the web.
30:22
In fact, with Blazor, again, all open source, this is the HTML that describes the game card and that thing right there that says functions from line five down, that is all C sharp. That on click event gets hit when you say on click
30:41
in the DOM notices the event, that runs and then it delegates to the card which is in the .NET standard DLL, the exact same one that we send down the wire. So it could be tax calculations, whatever really great, well factored, thoughtful code that you have that already works will now continue to work anywhere on a stack that you can change the source code to.
31:02
So that's cool. But where else could I potentially run this thing? That would be cool. Well, I could go and I've got another machine here that I brought, I actually brought a bunch of different machines, another machine here, this is me. I brought this through airport security,
31:28
so let's just give me a little credit. Airport security was not appreciative of this and I'm screaming, it's Pi, it's Pi, it's Raspberry Pi.
31:46
But you know, after the questioning, it went okay. This is called a Crow Pi and this is done, they did a Kickstarter. You could use any old Raspberry Pi but I think one that looks like a spy case is even cooler. It's got the thing here, it's from a company called Elec Crow. I don't have any relationship with this company
32:02
other than I'm a fan. And I've got like buttons and stuff hooked up to the GPIO pins up here. I've got LCD displays and all kinds of cool stuff. And I've got that hooked up to my machine here and then I'm gonna switch over to PowerShell and I'm gonna go here
32:23
and I am gonna shush into that machine. Yeah, we're trying to make that turn into a thing. If you would help me out with that, that would be great. We wanna basically just start casually throwing that into conversation. So when you're at work later, you'd be like, yeah, we did a little, and then I shushed into production. But don't make a big deal out of it.
32:41
Just do it casually and then see if it infects your coworkers. And if they start shushing into production or other things as well. And then if you could then later add a little jutee and you just, I just shushed into production and then you just kinda, just do a little, just a little body English, right? I just shushed into production. And then see if you get the whole office doing it
33:02
and then let me know, that would be great. So I'm shushed into the Raspberry Pi and I'm running top right here and this is cool because Raspberry Pis are fun. And in fact, I shushed into it with OpenSSH, which is actually built into Windows, ships with Windows now. You don't have to go and install Putty or anything.
33:20
All the key management and stuff, it's just in Windows. You can do all kinds of really weird things like shushing into Windows, running PowerShell and stuff like that. What I'm gonna do then is I'm gonna go over to Visual Studio Code and I'm gonna run that. And then I'm gonna go into Visual Studio Code and open up some .NET Core code right here.
33:42
And this .NET Core code is using something interesting that we just released, which is called System.Device.GPIO. So this is actually gonna talk to the LCD.
34:01
I could call the .NET standard DLL, but you get the idea. And I'm gonna say, hey LCD, pins, pins, pins, low level stuff, and the driver, driver for LCD is just source code, which is basically sitting down with the spec and the wiring diagram and lining it up. It's not rocket surgery.
34:22
And here's the interesting part. From Visual Studio Code, I'm gonna do a couple of interesting things. I've gone and I've modified Visual Studio Code's launch.json, because everything in Visual Studio Code is extremely configurable. And I've set up a pipe transport. So I'm telling Visual Studio Code that I want you to build this application specific to the Linux ARM runtime,
34:44
have a self-contained folder with all of the Linux ARM stuff that I would need for .NET and a Raspberry Pi. Then I want you to shush into the Pi and run the Visual Studio debugger Linux ARM edition and connect to it. So then, go like this.
35:03
Da da da da da da. F5, and push F5. It goes and builds it. It then runs the tree trimmer from Mono, which makes it smaller. Then it SCPs right there. The file's across. Now it's gonna turn orange. Now it turned orange. Now it is starting the Visual Studio debugger
35:22
over a secure channel using the keys that I've already set up. And then it's gonna hit a break point on line 47 and or 42, probably 42. Boom. So now I'm doing cross, but thank you. That smattering of applause.
35:42
So now we're doing cross-platform, cross-CPU architecture debugging where the build, to be clear, the build occurred on Windows. It built Apple Sauce. Then it got the ARM-specific build for Apple Sauce. That's where the entire analogy kind of falls apart.
36:03
When you talk about Apple Sauce in the context of processor instructions, you don't have like risk-based Apple Sauce, but anyway, work with me. And then I've got even variables and watches. So I can go and look at those variables across in Visual Studio Code.
36:22
Didn't have to pay Microsoft a penny. That's exciting. Now, da-da-da-da, go back over to the pie. I've got all kinds of cool stuff that I can run over there. Where am I on the desktop?
36:42
And then the crow pie is great. It comes with a ton of Python examples that I'm slowly converting and trying out different things so I can see if we can do matrix demos and stuff with the Raspberry Pi. So I can do Python or I can go and do .net and then we'll say, I'll just run it again, run SH.
37:02
We'll go back to the here. Wait for it. There it is.
37:20
Wait, Microsoft guy with a dollar sign. This is a quad processor, two gigahertz, super computer, $35 super computer. But still, this is a lot of processing power. It's really overkill, wouldn't you say, to use a complete microcomputer disguised as a bomb and to just say hello world.
37:41
You're really, you're just kind of pandering to the audience at this point. Microcomputers aren't where it's at. Real programmers use microcontrollers, right? Don't they? Well, what could we possibly do there? What I did is I talked to our friends at a company that has no relation, I have no relationship with, nor does Microsoft,
38:01
and I have a relationship with them, called Wilderness Labs that worked on Mono and Xamarin and were in the community working on things like Netduino and they gave me something from their recent Kickstarter. Let me go and run Photo Booth on this thing here.
38:29
Okay. This, this. Somebody took a picture of me once like this
38:40
and they were like, there's no effect at all. It's his actual forehead. This right here is a meadow board from Wilderness Labs and this is a tiny microcontroller. This is actually the development version. There's four of these in the world. It's an alpha build. The actual one, I'm not trying to flip you off, will be about the size of a middle finger,
39:02
but this one has some extra headers on top because right now I can't just plug it in and hit F5. It's actually using an ST link and I've gotta go and flash the firmware. This is a microcontroller, not a microcomputer, so it actually boots into NutX, N-U-T-T-X, and then effectively boots into .net.
39:21
So without a full operating system, kind of a microkernel operating system, we boot into that, I'm gonna go and then build that whole thing. So here I am in the lovely Visual Studio for the Mac. We have Visual Studios for every occasion, and they're all free for open source. Visual Studio community is totally free. Knock yourself out.
39:41
And I'm gonna go into my app, and here I've gone and said, hello, Fosden, pay attention. And in this case here, I'm gonna go and talk to this LED because this is not overkill. This is a tiny embedded device. If I took a tiny battery, like a 2,000 milliamp hour battery and I plugged it into a Raspberry Pi,
40:01
it would run it for tops four hours without a screen. Tops. Because it's a freaking computer, and we have to power the whole thing. But if I was to do an IOT device, I might want that to run for months or weeks on a small battery. It's a single tasking thing, so rather than booting into an operating system and then shushing into it and running stuff,
40:20
why don't we just boot into the app itself? So let's see if this works. What am I doing? I have no idea what I'm doing. Okay, hang on. I'm gonna turn off the Raspberry Pi because I don't have a cable for that. And then I'm gonna go and take the power cable from the Raspberry Pi. I'm gonna unplug it. I don't wanna have to F-suck this machine later,
40:42
so I'm waiting to send it down. There we go. Okay, so USB cable for five volts. USB cable for five volts. Plug it in. Right there. You all sing when you do debugging? No? I hope this code compiles, because if it doesn't, I'm a failure.
41:03
And I'm gonna then plug in the ST link. And then I'm gonna go out to the command line. Now, this is a little funky because it's an early build, so bear with me. But in the future, you'll just plug it in, you'll hit F5 and a miracle will happen. But it's nice to know what's happening underneath. So what we're gonna do is we're gonna go
41:21
and we're gonna run STUTIL and we're running GDB Server, and we're listening on 4242. And then in another window, I'm gonna go and do a remote target over to that other window, okay? So now we've just connected to 4242, okay?
41:45
All right, there you go. So the dots, the dots mean it's working. Hang on, don't applaud for dots. We don't applaud single dots. You applaud when the dot makes it all the way to the other side of the screen. So what that's doing is it's literally flashing
42:02
the firmware of the entire operating system of this thing using these four pins plugged into that ST link. And if we go back into Photo Booth, okay, what we're gonna expect to see
42:21
is this app booting into .NET. Now, the wire's a little bit small. So this is actually using Mono for the work, but it also brings up some really interesting computer science questions because .NET is traditionally jitted or just-in-time compiled, but things like generics kind of explode when you just-in-time compile them.
42:42
But you can also do interpretation of .NET code, but that would be kind of slow. Or you could do AOT or ahead-of-time compilation that Mono can do. Or you could potentially do all three. What if you could have a hybrid execution that would do the thing that was most appropriate, having all three execution contexts happen while the same CLR context kind of runs through them?
43:04
Let's go back to Photo Booth, and there we go. That is a microcontroller running .NET, no problem. Isn't that cool?
43:26
So that is from Wilderness Labs. And the thing that's interesting about this is that none of it would be possible unless Microsoft started thinking about open source the right way, why I went there, why Miguel works there, why we all do open source now.
43:41
The compiler, all the way down to the metal, enabled these folks to put it on actual metal, whether it be WebAssembly or 15-year-old WinForms apps, Docker containers in any cloud, Azure, Google Cloud, Heroku, Amazon, whatever. You can do this code anywhere with a toolkit
44:02
that is open source and flexible enough that you can plug in the pieces that make you happy and remove the pieces that you don't. Whether I was using Visual Studio Code or Vim or Emacs or Pico, I can do whatever I want, and it makes me very, very happy. I'm gonna have all of this stuff available, and I'll be outside to be able to talk to you, but that's my talk. It's a very exciting time in the .NET space,
44:21
and I'm happy that we're here at FOSDEM. Thank you very much.
44:43
This is the battle angel Alita version.