← Back
Scott Hanselman June 13, 2024 30m

Cross-platform UIs for all with Avalonia CEO Mike James

Read full transcript 20 segments
  1. [Music] [Music] hi I'm Scott Hansel and this is another hi I'm Scott Hansel and this is another hi I'm Scott Hansel and this is another episode of Hansel minutes today I'm episode of Hansel minutes today I'm episode of Hansel minutes today I'm talking with Mike James he's the CEO of talking with Mike James he's the CEO of talking with Mike James he's the CEO of avalonia you know I've had avalonia on avalonia you know I've had avalonia on avalonia you know I've had avalonia on the show before Mike I had stepen Kirk the show before Mike I had stepen Kirk the show before Mike I had stepen Kirk on I've had fans of avalonia what a uh on I've had fans of avalonia what a uh on I've had fans of avalonia what a uh maybe start with the uh the the reason maybe start with the uh the the reason maybe start with the uh the the reason that it's called avalonia what's the that it's called avalonia what's the that it's called avalonia what's the origin of the name oh so so the origin origin of the name oh so so the origin origin of the name oh so so the origin of the name is obviously WPF the code of the name is obviously WPF the code of the name is obviously WPF the code name was Avalon and avalonia is you know name was Avalon and avalonia is you know name was Avalon and avalonia is you know it's a homage to that but there was also it's a homage to that but there was also it's a homage to that but there was also it was originally called perspect so if it was originally called perspect so if it was originally called perspect so if we kind of cast back 10 years when we're we kind of cast back 10 years when we're we kind of cast back 10 years when we're we're 10 and a half and I think that you we're 10 and a half and I think that you we're 10 and a half and I think that you know when I was 10 I used that half a know when I was 10 I used that half a know when I was 10 I used that half a year really counted so I used to tell year really counted so I used to tell year really counted so I used to tell everyone so we're 10 and a half years everyone so we're 10 and a half years everyone so we're 10 and a half years old and it was called perspect but that old and it was called perspect but that old and it was called perspect but that turned out to to be trademarked so at turned out to to be trademarked so at turned out to to be trademarked so at some point there was a discussion with some point there was a discussion with some point there was a discussion with the community about new names uh and it the community about new names uh and it the community about new names uh and it abalonia as a homage as I say to uh to abalonia as a homage as I say to uh to abalonia as a homage as I say to uh to Avalon now were you there at the Avalon now were you there at the Avalon now were you there at the beginning when this all started no I'm a beginning when this all started no I'm a beginning when this all started no I'm a late starter so back when avalonia late starter so back when avalonia late starter so back when avalonia started so Stephen created it who you've started so Stephen created it who you've started so Stephen created it who you've spoken to and you know he created it in spoken to and you know he created it in spoken to and you know he created it in 2013 as a pet project always open source 2013 as a pet project always open source 2013 as a pet project always open source in then GitHub and around 2013 I was in then GitHub and around 2013 I was in then GitHub and around 2013 I was just getting into zamarin so I think I just getting into zamarin so I think I just getting into zamarin so I think I just started to work at zamarin as a just started to work at zamarin as a just started to work at zamarin as a support engineer so I I've been doing support engineer so I I've been doing support engineer so I I've been doing crossplatform but I wasn't aware of crossplatform but I wasn't aware of crossplatform but I wasn't aware of avalonia until about 5 years ago where I avalonia until about 5 years ago where I avalonia until about 5 years ago where I needed to Port my own WPF app to go needed to Port my own WPF app to go needed to Port my own WPF app to go crossplatform and so I was Googling

  2. crossplatform and so I was Googling crossplatform and so I was Googling around and I found this technology and I around and I found this technology and I around and I found this technology and I was like this looks really interesting was like this looks really interesting was like this looks really interesting and I kind of dived in and discovered an and I kind of dived in and discovered an and I kind of dived in and discovered an incredible community and decided I want incredible community and decided I want incredible community and decided I want to help this grow yeah Stephen was on to help this grow yeah Stephen was on to help this grow yeah Stephen was on show 684 folks can go to Hansel Andes / show 684 folks can go to Hansel Andes / show 684 folks can go to Hansel Andes / 684 and check out that original that was 684 and check out that original that was 684 and check out that original that was 5 years ago and then I had Dan Walmsley 5 years ago and then I had Dan Walmsley 5 years ago and then I had Dan Walmsley on a couple three years ago talking on a couple three years ago talking on a couple three years ago talking about how he was using it as well and about how he was using it as well and about how he was using it as well and when you say community like there's a when you say community like there's a when you say community like there's a ton of people that are excited about ton of people that are excited about ton of people that are excited about this and I love discovering apps that this and I love discovering apps that this and I love discovering apps that are written in avalonia but there's no are written in avalonia but there's no are written in avalonia but there's no real way to look at the app and tell real way to look at the app and tell real way to look at the app and tell other than it just works yeah it's it's other than it just works yeah it's it's other than it just works yeah it's it's a benefit of Open Source that anyone can a benefit of Open Source that anyone can a benefit of Open Source that anyone can go and get started with it but the go and get started with it but the go and get started with it but the negative is we just don't know who's negative is we just don't know who's negative is we just don't know who's building with it half the time the building with it half the time the building with it half the time the technology itself have alone here it's technology itself have alone here it's technology itself have alone here it's got I think 403 contributors if we look got I think 403 contributors if we look got I think 403 contributors if we look on GitHub today 20 almost 26,000 Stars on GitHub today 20 almost 26,000 Stars on GitHub today 20 almost 26,000 Stars 21.5 million builds since January about 21.5 million builds since January about 21.5 million builds since January about 70,000 yeah it's it's a lot and it's 70,000 yeah it's it's a lot and it's 70,000 yeah it's it's a lot and it's growing so 70,000 active monthly users growing so 70,000 active monthly users growing so 70,000 active monthly users and it's about 20 to 30% month on month and it's about 20 to 30% month on month and it's about 20 to 30% month on month growth in terms of like the stats the growth in terms of like the stats the growth in terms of like the stats the community is constantly growing we're community is constantly growing we're community is constantly growing we're always learning of new apps that are always learning of new apps that are always learning of new apps that are being built with avalonia and it's it's being built with avalonia and it's it's being built with avalonia and it's it's really just so rewarding to see that I really just so rewarding to see that I really just so rewarding to see that I love that you're still discovering how love that you're still discovering how love that you're still discovering how these things work it's interesting in these things work it's interesting in these things work it's interesting in the space of Open Source though because the space of Open Source though because the space of Open Source though because you know you don't want to like put in you know you don't want to like put in you know you don't want to like put in you can't really put in Telemetry unless you can't really put in Telemetry unless you can't really put in Telemetry unless people opt in uh so you want to know how

  3. people opt in uh so you want to know how people opt in uh so you want to know how people are using it but the only way you people are using it but the only way you people are using it but the only way you can really tell is that they're pulling can really tell is that they're pulling can really tell is that they're pulling your new get packages right there's no your new get packages right there's no your new get packages right there's no way to like call them and say hey I saw way to like call them and say hey I saw way to like call them and say hey I saw that you are using my product tell me that you are using my product tell me that you are using my product tell me tell me what cool stuff you're doing tell me what cool stuff you're doing tell me what cool stuff you're doing with it ex exactly that and and we you with it ex exactly that and and we you with it ex exactly that and and we you know we've got Telemetry and we've got know we've got Telemetry and we've got know we've got Telemetry and we've got met tricks that we use in order to gauge met tricks that we use in order to gauge met tricks that we use in order to gauge engagement like there's tools like engagement like there's tools like engagement like there's tools like orbit. love which help us get a feel for orbit. love which help us get a feel for orbit. love which help us get a feel for Community engagement on on GitHub but Community engagement on on GitHub but Community engagement on on GitHub but yeah it's that challenge of often we'll yeah it's that challenge of often we'll yeah it's that challenge of often we'll only discover that someone's building only discover that someone's building only discover that someone's building with us when they've hit a problem oh with us when they've hit a problem oh with us when they've hit a problem oh it's so they call TCH support and then it's so they call TCH support and then it's so they call TCH support and then you're like oh we didn't know that you're like oh we didn't know that you're like oh we didn't know that company a or Company B is using it but company a or Company B is using it but company a or Company B is using it but they called in and now we're friends they called in and now we're friends they called in and now we're friends with them and we can help them be with them and we can help them be with them and we can help them be successful precisely that and it's uh successful precisely that and it's uh successful precisely that and it's uh it's really nice to be able to build it's really nice to be able to build it's really nice to be able to build these relationships with these these relationships with these these relationships with these businesses because you know they're businesses because you know they're businesses because you know they're looking for long term support and looking for long term support and looking for long term support and stability in their Tech products you stability in their Tech products you stability in their Tech products you know we're very much an Enterprise know we're very much an Enterprise know we're very much an Enterprise solution we're here for we've been here solution we're here for we've been here solution we're here for we've been here for a decade we we've got a road map for a decade we we've got a road map for a decade we we've got a road map that kind of looks out to the next that kind of looks out to the next that kind of looks out to the next decade so to be able to create these decade so to be able to create these decade so to be able to create these relationships with customers like unity relationships with customers like unity relationships with customers like unity and out systems it's they kind of become and out systems it's they kind of become and out systems it's they kind of become friends a lot of the the customers friends a lot of the the customers friends a lot of the the customers that's cool so backing up for folks who that's cool so backing up for folks who that's cool so backing up for folks who may be wondering what we're talking may be wondering what we're talking may be wondering what we're talking about WPF is Windows presentation about WPF is Windows presentation about WPF is Windows presentation foundation and that was always written foundation and that was always written foundation and that was always written by Microsoft with the assumption that it by Microsoft with the assumption that it by Microsoft with the assumption that it would run on Windows and I understand would run on Windows and I understand would run on Windows and I understand from my conversations with step that from my conversations with step that from my conversations with step that they really baked some serious they really baked some serious they really baked some serious assumptions about how applications assumptions about how applications assumptions about how applications should work baked baked baked in because should work baked baked baked in because should work baked baked baked in because it's it's always assuming windows and

  4. it's it's always assuming windows and it's it's always assuming windows and you're always assuming not and that you're always assuming not and that you're always assuming not and that Challen that must be a very complicated Challen that must be a very complicated Challen that must be a very complicated technical challenge for you to bump into technical challenge for you to bump into technical challenge for you to bump into so from from the avalonia perspective it so from from the avalonia perspective it so from from the avalonia perspective it was always built to be crossplatform so was always built to be crossplatform so was always built to be crossplatform so there were decisions made to be WPF like there were decisions made to be WPF like there were decisions made to be WPF like so if you if you're using the open so if you if you're using the open so if you if you're using the open source technology that we've built source technology that we've built source technology that we've built you're you're if you've ever built a WPF you're you're if you've ever built a WPF you're you're if you've ever built a WPF app then you're already an avalonia app then you're already an avalonia app then you're already an avalonia expert you're you're not going to be expert you're you're not going to be expert you're you're not going to be able to copy and paste 100% of your code able to copy and paste 100% of your code able to copy and paste 100% of your code to avalonia for example uh dependency to avalonia for example uh dependency to avalonia for example uh dependency property in WPF is now avalonia property property in WPF is now avalonia property property in WPF is now avalonia property and we use generics so like you just and we use generics so like you just and we use generics so like you just you're going to have to change some code you're going to have to change some code you're going to have to change some code but there was a lot of demand from but there was a lot of demand from but there was a lot of demand from businesses to have a a crossplatform WPS businesses to have a a crossplatform WPS businesses to have a a crossplatform WPS because you know they've got these because you know they've got these because you know they've got these Mission critical applications and I'm Mission critical applications and I'm Mission critical applications and I'm loed to use the word legacy because it's loed to use the word legacy because it's loed to use the word legacy because it's not really Legacy like they're critical not really Legacy like they're critical not really Legacy like they're critical applications for these Enterprises and applications for these Enterprises and applications for these Enterprises and they're stuck on Windows I'm on a Mac a they're stuck on Windows I'm on a Mac a they're stuck on Windows I'm on a Mac a lot of the people I meet are using Mac lot of the people I meet are using Mac lot of the people I meet are using Mac when we look at other markets around the when we look at other markets around the when we look at other markets around the world there are some markets there are world there are some markets there are world there are some markets there are demands from governments to move to demands from governments to move to demands from governments to move to Linux and to to move away from Windows Linux and to to move away from Windows Linux and to to move away from Windows so there's a huge opportunity there to so there's a huge opportunity there to so there's a huge opportunity there to help these Enterprises with that kind of help these Enterprises with that kind of help these Enterprises with that kind of modernization story yeah I've talked modernization story yeah I've talked modernization story yeah I've talked before and blogged before you may have before and blogged before you may have before and blogged before you may have seen the post on Dark Matter developers seen the post on Dark Matter developers seen the post on Dark Matter developers right the kind of The Quiet developers right the kind of The Quiet developers right the kind of The Quiet developers that are out there and we're having that are out there and we're having that are out there and we're having conversations with them but the conversations with them but the conversations with them but the conversations are not on social media conversations are not on social media conversations are not on social media right so we we over pivot on social right so we we over pivot on social right so we we over pivot on social media because we hear loud people being

  5. media because we hear loud people being media because we hear loud people being loud and then we assume that those are loud and then we assume that those are loud and then we assume that those are the people like they're the people the people like they're the people the people like they're the people they're using the product and they must they're using the product and they must they're using the product and they must be who we should cater to uh I've heard be who we should cater to uh I've heard be who we should cater to uh I've heard people call it Twitter driven people call it Twitter driven people call it Twitter driven development but the reality is a lot of development but the reality is a lot of development but the reality is a lot of space between the stars and you've got space between the stars and you've got space between the stars and you've got one or two people yelling on Twitter one or two people yelling on Twitter one or two people yelling on Twitter about something but then there's like a about something but then there's like a about something but then there's like a 100 developers that are just doing their 100 developers that are just doing their 100 developers that are just doing their job making great software working at big job making great software working at big job making great software working at big companies that we all have all heard of companies that we all have all heard of companies that we all have all heard of and I feel like those are the people and I feel like those are the people and I feel like those are the people that are kind of thanklessly building that are kind of thanklessly building that are kind of thanklessly building great WPF applications and they just great WPF applications and they just great WPF applications and they just need to know that there are options need to know that there are options need to know that there are options exactly that and I think that's been exactly that and I think that's been exactly that and I think that's been with xpf you know we announced it last with xpf you know we announced it last with xpf you know we announced it last year and for context xpf is our year and for context xpf is our year and for context xpf is our crossplatform WPF so that's like % crossplatform WPF so that's like % crossplatform WPF so that's like % compatible I like to say it's binary compatible I like to say it's binary compatible I like to say it's binary compatible but the engineers tell me off compatible but the engineers tell me off compatible but the engineers tell me off when I say that so if your third party when I say that so if your third party when I say that so if your third party dependencies will work with xpf you dependencies will work with xpf you dependencies will work with xpf you don't have to recompile them for for xpf don't have to recompile them for for xpf don't have to recompile them for for xpf but we announced that last year and when but we announced that last year and when but we announced that last year and when you think about our marketing and and you think about our marketing and and you think about our marketing and and our messaging our biggest challenge has our messaging our biggest challenge has our messaging our biggest challenge has been awareness getting people to been awareness getting people to been awareness getting people to understand that it exists and that it's understand that it exists and that it's understand that it exists and that it's an option and that they don't need to an option and that they don't need to an option and that they don't need to rewrite in some new technology they rewrite in some new technology they rewrite in some new technology they don't need to go to the web or rewrite don't need to go to the web or rewrite don't need to go to the web or rewrite flatter they have a a modernization flatter they have a a modernization flatter they have a a modernization strategy which is kind of couple of strategy which is kind of couple of strategy which is kind of couple of hours work and you're now on Mac and hours work and you're now on Mac and hours work and you're now on Mac and Linux yeah you know when things like Linux yeah you know when things like Linux yeah you know when things like line up when things line up cleanly line up when things line up cleanly line up when things line up cleanly that's when interfaces really are that's when interfaces really are that's when interfaces really are magical because in this case here WPF is magical because in this case here WPF is magical because in this case here WPF is an interface it's a it's a surface area

  6. an interface it's a it's a surface area an interface it's a it's a surface area some of it's high level some of it's some of it's high level some of it's some of it's high level some of it's lowlevel but when you go and you make a lowlevel but when you go and you make a lowlevel but when you go and you make a reference to a WPF library and you start reference to a WPF library and you start reference to a WPF library and you start calling their apis you make a lot of calling their apis you make a lot of calling their apis you make a lot of assumptions and you have now a dependent assumptions and you have now a dependent assumptions and you have now a dependent you can I'm understanding you can swap you can I'm understanding you can swap you can I'm understanding you can swap WPF out put xpf in now it's not Windows WPF out put xpf in now it's not Windows WPF out put xpf in now it's not Windows presentation Foundation it's presentation Foundation it's presentation Foundation it's crossplatform presentation Foundation crossplatform presentation Foundation crossplatform presentation Foundation your app still thinks it's talking to your app still thinks it's talking to your app still thinks it's talking to WPF right like it's a it's a lie but WPF right like it's a it's a lie but WPF right like it's a it's a lie but it's a wildly successful lie exactly it's a wildly successful lie exactly it's a wildly successful lie exactly that so um we we fored WPF it was back that so um we we fored WPF it was back that so um we we fored WPF it was back in December in December in December 2021 Nikita who is our like resident 2021 Nikita who is our like resident 2021 Nikita who is our like resident genius this is he is by far the smartest genius this is he is by far the smartest genius this is he is by far the smartest man I've ever met he is so incredibly man I've ever met he is so incredibly man I've ever met he is so incredibly bright he took WPF and he started bright he took WPF and he started bright he took WPF and he started building it on his Linux PC just getting building it on his Linux PC just getting building it on his Linux PC just getting it to build at all was a challenge um it to build at all was a challenge um it to build at all was a challenge um but yeah he got it building and then he but yeah he got it building and then he but yeah he got it building and then he set about replacing milore which is the set about replacing milore which is the set about replacing milore which is the WPF is kind of three tiers the lowest WPF is kind of three tiers the lowest WPF is kind of three tiers the lowest level is unmanaged code it's a level is unmanaged code it's a level is unmanaged code it's a compositional renderer for WPF which compositional renderer for WPF which compositional renderer for WPF which uses direct X9 that's what's been uses direct X9 that's what's been uses direct X9 that's what's been replaced so presentation core and replaced so presentation core and replaced so presentation core and presentation Foundation they remain presentation Foundation they remain presentation Foundation they remain largely untouched and your application largely untouched and your application largely untouched and your application sits on top of those so yeah in terms of sits on top of those so yeah in terms of sits on top of those so yeah in terms of your application it thinks it's running your application it thinks it's running your application it thinks it's running on vanilla WPF and all of your on vanilla WPF and all of your on vanilla WPF and all of your dependencies terer ex innc Fusion Dev dependencies terer ex innc Fusion Dev dependencies terer ex innc Fusion Dev Express they think they're running on Express they think they're running on Express they think they're running on WPF as well yeah so when it works first

  7. WPF as well yeah so when it works first WPF as well yeah so when it works first time it genuinely feels like magic yeah time it genuinely feels like magic yeah time it genuinely feels like magic yeah I think that one thing just to get into I think that one thing just to get into I think that one thing just to get into the weeds the technical weeds for a the weeds the technical weeds for a the weeds the technical weeds for a second mil core m c r e is a thing that second mil core m c r e is a thing that second mil core m c r e is a thing that people don't think about when they are people don't think about when they are people don't think about when they are thinking about WPF when you think about thinking about WPF when you think about thinking about WPF when you think about the major components of WPF you think the major components of WPF you think the major components of WPF you think about presentation framework think about about presentation framework think about about presentation framework think about presentation core would sit on top of presentation core would sit on top of presentation core would sit on top of the CLR but then mil core kind of like the CLR but then mil core kind of like the CLR but then mil core kind of like slides in underneath underneath the CLR slides in underneath underneath the CLR slides in underneath underneath the CLR but above direct X and it makes WPF so but above direct X and it makes WPF so but above direct X and it makes WPF so fast it makes that direct X relationship fast it makes that direct X relationship fast it makes that direct X relationship possible and that's all written in possible and that's all written in possible and that's all written in unmanaged code right so getting that to unmanaged code right so getting that to unmanaged code right so getting that to work is is is like magical and and work is is is like magical and and work is is is like magical and and that's part of the LIE we replaced it we that's part of the LIE we replaced it we that's part of the LIE we replaced it we just you know delete that and then throw just you know delete that and then throw just you know delete that and then throw in avalonia so you know it's uh just Del in avalonia so you know it's uh just Del in avalonia so you know it's uh just Del that yeah I mean you need about a decade that yeah I mean you need about a decade that yeah I mean you need about a decade of work to build a a crossplatform UI of work to build a a crossplatform UI of work to build a a crossplatform UI framework in an advanced compositional framework in an advanced compositional framework in an advanced compositional renderer which we've got in avalonia in renderer which we've got in avalonia in renderer which we've got in avalonia in the open source stuff so we just slide the open source stuff so we just slide the open source stuff so we just slide that in and then you spend like a year that in and then you spend like a year that in and then you spend like a year 18 months just working away to to 18 months just working away to to 18 months just working away to to resolve resolve resolve the differences in rendering right and the differences in rendering right and the differences in rendering right and you know do you know if it's 100% WPF you know do you know if it's 100% WPF you know do you know if it's 100% WPF your app which I've yet to see 100% WPF your app which I've yet to see 100% WPF your app which I've yet to see 100% WPF app if it is then it works with no no app if it is then it works with no no app if it is then it works with no no problems and it's really like 30 seconds problems and it's really like 30 seconds problems and it's really like 30 seconds it's when you've got those third party it's when you've got those third party it's when you've got those third party dependencies which are really most of dependencies which are really most of dependencies which are really most of the time using GDI or their win forms

  8. the time using GDI or their win forms the time using GDI or their win forms right but you're you're using that from right but you're you're using that from right but you're you're using that from saml that's where it becomes a bit more saml that's where it becomes a bit more saml that's where it becomes a bit more challenging and that's where I think the challenging and that's where I think the challenging and that's where I think the engineers really enjoy because it's like engineers really enjoy because it's like engineers really enjoy because it's like deep in the weeds technical stuff to to deep in the weeds technical stuff to to deep in the weeds technical stuff to to get those controls working this is a get those controls working this is a get those controls working this is a great example of why I don't like it great example of why I don't like it great example of why I don't like it when people use the word just to refer when people use the word just to refer when people use the word just to refer to someone's hard work right because I to someone's hard work right because I to someone's hard work right because I love that you you said that like in just love that you you said that like in just love that you you said that like in just oh yeah you just spend 10 years making a oh yeah you just spend 10 years making a oh yeah you just spend 10 years making a highquality cross-platform you know open highquality cross-platform you know open highquality cross-platform you know open source system and then you just spend source system and then you just spend source system and then you just spend another 18 months right but the reality another 18 months right but the reality another 18 months right but the reality is in order for it to look like magic a is in order for it to look like magic a is in order for it to look like magic a huge amount of work needs to happen and huge amount of work needs to happen and huge amount of work needs to happen and what's the what's the old joke like any what's the what's the old joke like any what's the what's the old joke like any any sufficiently advanced technology is any sufficiently advanced technology is any sufficiently advanced technology is distinguishable from Magic any you know distinguishable from Magic any you know distinguishable from Magic any you know anything that is sufficiently abstracted anything that is sufficiently abstracted anything that is sufficiently abstracted away is in distinguish of magic so in away is in distinguish of magic so in away is in distinguish of magic so in this case here you're writing Windows this case here you're writing Windows this case here you're writing Windows presentation Foundation code you meaning presentation Foundation code you meaning presentation Foundation code you meaning the you know me the Dark Matter the you know me the Dark Matter the you know me the Dark Matter developer who just wants to write an app developer who just wants to write an app developer who just wants to write an app and then it lights up it lights up and then it lights up it lights up and then it lights up it lights up crossplatform and the fact that you all crossplatform and the fact that you all crossplatform and the fact that you all at avalonia took that under your like as at avalonia took that under your like as at avalonia took that under your like as your you know your cross to bear and and your you know your cross to bear and and your you know your cross to bear and and Microsoft didn't is really cool because Microsoft didn't is really cool because Microsoft didn't is really cool because I suppose someone at Microsoft could I suppose someone at Microsoft could I suppose someone at Microsoft could have done that but yeah chose not to so have done that but yeah chose not to so have done that but yeah chose not to so this is an opportunity where you then this is an opportunity where you then this is an opportunity where you then forked WPF which you couldn't have done forked WPF which you couldn't have done forked WPF which you couldn't have done if it hadn't been open source and then if it hadn't been open source and then if it hadn't been open source and then started running I mean we're we're built started running I mean we're we're built started running I mean we're we're built on the shoulders of giants like we have on the shoulders of giants like we have on the shoulders of giants like we have to acknowledge the fact that Microsoft to acknowledge the fact that Microsoft to acknowledge the fact that Microsoft was very gracious in in making WPF open was very gracious in in making WPF open was very gracious in in making WPF open source Microsoft was gracious in

  9. source Microsoft was gracious in source Microsoft was gracious in creating uh net be crossplatform you creating uh net be crossplatform you creating uh net be crossplatform you know before that we were running on mono know before that we were running on mono know before that we were running on mono but you know the fact that we have a but you know the fact that we have a but you know the fact that we have a really fast runtime that's getting a lot really fast runtime that's getting a lot really fast runtime that's getting a lot of love you know we're we're excited of love you know we're we're excited of love you know we're we're excited about what's coming with net 9 later about what's coming with net 9 later about what's coming with net 9 later this year like we couldn't have done this year like we couldn't have done this year like we couldn't have done this without what Microsoft have this without what Microsoft have this without what Microsoft have provided to to the whole community and provided to to the whole community and provided to to the whole community and ecosystem at large but yeah it's um it's ecosystem at large but yeah it's um it's ecosystem at large but yeah it's um it's entertaining to go back and look at some entertaining to go back and look at some entertaining to go back and look at some of the old threads around people asking of the old threads around people asking of the old threads around people asking on GitHub can we get a crossplatform on GitHub can we get a crossplatform on GitHub can we get a crossplatform version of WPF and the answers were no version of WPF and the answers were no version of WPF and the answers were no it's impossible and it's like it's not it's impossible and it's like it's not it's impossible and it's like it's not impossible it's just an awful lot of impossible it's just an awful lot of impossible it's just an awful lot of work yeah there is nothing impossible um work yeah there is nothing impossible um work yeah there is nothing impossible um there is a a famous blog post that was there is a a famous blog post that was there is a a famous blog post that was written I think in I want to say two or written I think in I want to say two or written I think in I want to say two or three years ago and I'm curious what you three years ago and I'm curious what you three years ago and I'm curious what you think about this it's very geeky it says think about this it's very geeky it says think about this it's very geeky it says win32 is the only stable ABI on Linux win32 is the only stable ABI on Linux win32 is the only stable ABI on Linux ABI is an application binary interface ABI is an application binary interface ABI is an application binary interface and basically it's saying if you want to and basically it's saying if you want to and basically it's saying if you want to be successful and have your apps run be successful and have your apps run be successful and have your apps run everywhere you might as well just write everywhere you might as well just write everywhere you might as well just write a Windows app because that's the only a Windows app because that's the only a Windows app because that's the only thing you can count on because if if you thing you can count on because if if you thing you can count on because if if you do a Linux Port you're going to be do a Linux Port you're going to be do a Linux Port you're going to be playing whacka with all the different playing whacka with all the different playing whacka with all the different versions of Linux and all the different versions of Linux and all the different versions of Linux and all the different versions of you know GBC and all that versions of you know GBC and all that versions of you know GBC and all that kind of stuff and even valve you know kind of stuff and even valve you know kind of stuff and even valve you know who supports steam has said don't even who supports steam has said don't even who supports steam has said don't even bother don't even bother porting bother don't even bother porting bother don't even bother porting something to Linux just write a Windows something to Linux just write a Windows something to Linux just write a Windows app and we'll take care of it with app and we'll take care of it with app and we'll take care of it with whether proton or Vulcan or whatever it whether proton or Vulcan or whatever it whether proton or Vulcan or whatever it seems like the same thing is is seems like the same thing is is seems like the same thing is is applicable within the context of xpf if

  10. applicable within the context of xpf if applicable within the context of xpf if you have a Windows app it's WPF you're you have a Windows app it's WPF you're you have a Windows app it's WPF you're in a great spot is that it is is that a in a great spot is that it is is that a in a great spot is that it is is that a true statement and that kind of a sad true statement and that kind of a sad true statement and that kind of a sad statement I think Linux is is an statement I think Linux is is an statement I think Linux is is an interesting OS I've tried it a few times interesting OS I've tried it a few times interesting OS I've tried it a few times as my desktop I normally manage about 48 as my desktop I normally manage about 48 as my desktop I normally manage about 48 hours before I reinstall Windows um I hours before I reinstall Windows um I hours before I reinstall Windows um I just don't think I'm smart enough for it just don't think I'm smart enough for it just don't think I'm smart enough for it the guys you know Nikita for example the guys you know Nikita for example the guys you know Nikita for example will happily sit and rebuild his kernel will happily sit and rebuild his kernel will happily sit and rebuild his kernel because he wants to install some random because he wants to install some random because he wants to install some random audio drivers or something it all goes audio drivers or something it all goes audio drivers or something it all goes over my head but yeah Linux is a over my head but yeah Linux is a over my head but yeah Linux is a challenge to support like we have um challenge to support like we have um challenge to support like we have um particular drr that we support like you particular drr that we support like you particular drr that we support like you know the stand ones to Fedora but we know the stand ones to Fedora but we know the stand ones to Fedora but we made a sale recently of xpf to a a large made a sale recently of xpf to a a large made a sale recently of xpf to a a large I mean absolutely huge compared to us um I mean absolutely huge compared to us um I mean absolutely huge compared to us um Chinese conglomerate they're running on Chinese conglomerate they're running on Chinese conglomerate they're running on Chinese flavor of Linux I think it's Chinese flavor of Linux I think it's Chinese flavor of Linux I think it's deep in and then they're running on some deep in and then they're running on some deep in and then they're running on some Hardware that you can only get in China Hardware that you can only get in China Hardware that you can only get in China as well so it was Arm based so that you as well so it was Arm based so that you as well so it was Arm based so that you know makes things even more complicated know makes things even more complicated know makes things even more complicated for us but because of the way that we for us but because of the way that we for us but because of the way that we work it's havalon under the hood and work it's havalon under the hood and work it's havalon under the hood and vonia doesn't require Too Much from the vonia doesn't require Too Much from the vonia doesn't require Too Much from the underlying operating system to work as underlying operating system to work as underlying operating system to work as long as we can get like keyboard and long as we can get like keyboard and long as we can get like keyboard and mouse like inputs and we have a canvas mouse like inputs and we have a canvas mouse like inputs and we have a canvas to render to then we've pretty much got to render to then we've pretty much got to render to then we've pretty much got everything we need to to work so yeah everything we need to to work so yeah everything we need to to work so yeah it's it's definitely a challenge um to it's it's definitely a challenge um to it's it's definitely a challenge um to support all the different flavors of support all the different flavors of support all the different flavors of Linux but it's easier for us than if we Linux but it's easier for us than if we Linux but it's easier for us than if we had gone down the route of you know had gone down the route of you know had gone down the route of you know trying to abstract GDK or some other

  11. trying to abstract GDK or some other trying to abstract GDK or some other Linux UI framework drawing everything Linux UI framework drawing everything Linux UI framework drawing everything ourselves and owning that whole stack ourselves and owning that whole stack ourselves and owning that whole stack makes life just a bit easier yeah that makes life just a bit easier yeah that makes life just a bit easier yeah that drawing everything yourselves thing is drawing everything yourselves thing is drawing everything yourselves thing is really interesting because I was doing really interesting because I was doing really interesting because I was doing in 1990 I want to say 1996 or 1997 I was in 1990 I want to say 1996 or 1997 I was in 1990 I want to say 1996 or 1997 I was at Nike doing Java and it was right once at Nike doing Java and it was right once at Nike doing Java and it was right once debug everywhere and everything what was debug everywhere and everything what was debug everywhere and everything what was called owner draw you know because called owner draw you know because called owner draw you know because basically you you didn't have an app you basically you you didn't have an app you basically you you didn't have an app you had pixels and that seems to be a really had pixels and that seems to be a really had pixels and that seems to be a really interesting philosophy around interesting philosophy around interesting philosophy around crossplatform there's two ways to think crossplatform there's two ways to think crossplatform there's two ways to think about crossplatform use their controls about crossplatform use their controls about crossplatform use their controls and try to make the pretty everywhere or and try to make the pretty everywhere or and try to make the pretty everywhere or just say forget it and then just draw just say forget it and then just draw just say forget it and then just draw the controls what's what's the avalonia the controls what's what's the avalonia the controls what's what's the avalonia philosophy so so we draw everything philosophy so so we draw everything philosophy so so we draw everything ourselves so we own the entire rendering ourselves so we own the entire rendering ourselves so we own the entire rendering stack this is a much more difficult stack this is a much more difficult stack this is a much more difficult approach I would say in some elements approach I would say in some elements approach I would say in some elements and much easier in others like there's and much easier in others like there's and much easier in others like there's pros and cons with every technology pros and cons with every technology pros and cons with every technology Choice one of the most difficult things Choice one of the most difficult things Choice one of the most difficult things with with this approach is handling with with this approach is handling with with this approach is handling stuff like fonts like rendering text is stuff like fonts like rendering text is stuff like fonts like rendering text is incredibly difficult we're really lucky incredibly difficult we're really lucky incredibly difficult we're really lucky we've got a guy called Benedict on our we've got a guy called Benedict on our we've got a guy called Benedict on our team who was like specialized just on team who was like specialized just on team who was like specialized just on text rendering but yes having a text rendering but yes having a text rendering but yes having a consistent UI across all of the consistent UI across all of the consistent UI across all of the platforms is a huge benefit and having platforms is a huge benefit and having platforms is a huge benefit and having just one rendering stack that works the just one rendering stack that works the just one rendering stack that works the same across every platform is a huge same across every platform is a huge same across every platform is a huge benefit for us now we we sit on top of benefit for us now we we sit on top of benefit for us now we we sit on top of skia you don't have to use skia you can skia you don't have to use skia you can skia you don't have to use skia you can use direct X on Windows as well and it's use direct X on Windows as well and it's use direct X on Windows as well and it's pluggable like that low level so you you

  12. pluggable like that low level so you you pluggable like that low level so you you can pick and we we may Implement uh new can pick and we we may Implement uh new can pick and we we may Implement uh new lowlevel renderers in the future but we lowlevel renderers in the future but we lowlevel renderers in the future but we the only native control is really the the only native control is really the the only native control is really the window that we're we're drawing into and window that we're we're drawing into and window that we're we're drawing into and there are some platforms like embedded there are some platforms like embedded there are some platforms like embedded if you're running on a HMI device where if you're running on a HMI device where if you're running on a HMI device where there's not even a window we're just there's not even a window we're just there's not even a window we're just pushing pixels to the frame buffer on pushing pixels to the frame buffer on pushing pixels to the frame buffer on Linux pushing pixels to the frame buffer Linux pushing pixels to the frame buffer Linux pushing pixels to the frame buffer on Linux and getting and doing that on Linux and getting and doing that on Linux and getting and doing that though does it make an app look like though does it make an app look like though does it make an app look like Linux or does it just make a pretty app Linux or does it just make a pretty app Linux or does it just make a pretty app and it's really on the responsibility of and it's really on the responsibility of and it's really on the responsibility of the author to make it look nice the author to make it look nice the author to make it look nice everywhere because within the frame is everywhere because within the frame is everywhere because within the frame is going to be the same app it's going to going to be the same app it's going to going to be the same app it's going to look Pixel Perfect everywhere so if I look Pixel Perfect everywhere so if I look Pixel Perfect everywhere so if I want it to feel right that's on me and want it to feel right that's on me and want it to feel right that's on me and that's probably okay well so if you're that's probably okay well so if you're that's probably okay well so if you're using the frame buffer then you don't using the frame buffer then you don't using the frame buffer then you don't have a desktop environment so you're have a desktop environment so you're have a desktop environment so you're you're just a screen so this is like for you're just a screen so this is like for you're just a screen so this is like for those HMI the human machine interfaces those HMI the human machine interfaces those HMI the human machine interfaces which is typically like an industrial which is typically like an industrial which is typically like an industrial touchcreen m one of our big customers touchcreen m one of our big customers touchcreen m one of our big customers Schneider Electric um they adopted Schneider Electric um they adopted Schneider Electric um they adopted avalonia for their Harmony uh HMI avalonia for their Harmony uh HMI avalonia for their Harmony uh HMI devices you Google them you can see that devices you Google them you can see that devices you Google them you can see that that come in a variety of sizes and I that come in a variety of sizes and I that come in a variety of sizes and I believe it's for their automation believe it's for their automation believe it's for their automation systems so the avalonia app there systems so the avalonia app there systems so the avalonia app there there's no desktop environment there's there's no desktop environment there's there's no desktop environment there's no file Pickers or anything like that no file Pickers or anything like that no file Pickers or anything like that there's no window decorations it's kiosk there's no window decorations it's kiosk there's no window decorations it's kiosk exactly that it's a full screen exactly that it's a full screen exactly that it's a full screen application nice we can run on very application nice we can run on very application nice we can run on very minimal dependencies like we don't need minimal dependencies like we don't need minimal dependencies like we don't need GDK you can basically just install the GDK you can basically just install the GDK you can basically just install the Linux kernel of the lowest level and Linux kernel of the lowest level and Linux kernel of the lowest level and then a couple of extra dependencies and then a couple of extra dependencies and then a couple of extra dependencies and then your avalonia app will run on top then your avalonia app will run on top then your avalonia app will run on top of that that's pretty crazy and it just

  13. of that that's pretty crazy and it just of that that's pretty crazy and it just works that's uh yeah now the website I works that's uh yeah now the website I works that's uh yeah now the website I was teas I was teasing a friend uh who was teas I was teasing a friend uh who was teas I was teasing a friend uh who works at avalonia earlier because the works at avalonia earlier because the works at avalonia earlier because the website says you can do you can do a website says you can do you can do a website says you can do you can do a port in 30 seconds and that you know port in 30 seconds and that you know port in 30 seconds and that you know that can't be true but it kind of that can't be true but it kind of that can't be true but it kind of actually is true which blows my mind actually is true which blows my mind actually is true which blows my mind I've seen how fast you can type so I I've seen how fast you can type so I I've seen how fast you can type so I think you think you think you could it's um yeah I think mileage may could it's um yeah I think mileage may could it's um yeah I think mileage may vary so to get a port working with xpf vary so to get a port working with xpf vary so to get a port working with xpf you just update the Cs Pro so you're you just update the Cs Pro so you're you just update the Cs Pro so you're going into the top line which is your going into the top line which is your going into the top line which is your project SDK you're going to change that project SDK you're going to change that project SDK you're going to change that from from I think it's windows. SDK to from from I think it's windows. SDK to from from I think it's windows. SDK to xpf and then you add your license xpf and then you add your license xpf and then you add your license information as a as a property within information as a as a property within information as a as a property within the Cs Pro and assuming that you've the Cs Pro and assuming that you've the Cs Pro and assuming that you've already set up new get before because we already set up new get before because we already set up new get before because we Shi in a private new get feed then Shi in a private new get feed then Shi in a private new get feed then that's the only change that you need to that's the only change that you need to that's the only change that you need to make your app is now ready to start make your app is now ready to start make your app is now ready to start testing that's awesome yeah so it it testing that's awesome yeah so it it testing that's awesome yeah so it it really can be 30 seconds so I'm using really can be 30 seconds so I'm using really can be 30 seconds so I'm using the example of like baby smash baby the example of like baby smash baby the example of like baby smash baby smash was a game I wrote for my son he smash was a game I wrote for my son he smash was a game I wrote for my son he was on my lap and I wrote a game game was on my lap and I wrote a game game was on my lap and I wrote a game game where you slap the keyboard and it uses where you slap the keyboard and it uses where you slap the keyboard and it uses WPF to do really crazy stuff and at the WPF to do really crazy stuff and at the WPF to do really crazy stuff and at the time it was quite revolutionary this is time it was quite revolutionary this is time it was quite revolutionary this is 18 years ago it would have you would use 18 years ago it would have you would use 18 years ago it would have you would use custom fonts and they would Spin and custom fonts and they would Spin and custom fonts and they would Spin and they had gradients and You' go baby they had gradients and You' go baby they had gradients and You' go baby smash I could just compile that against smash I could just compile that against smash I could just compile that against xpf you can so I actually took baby xpf you can so I actually took baby xpf you can so I actually took baby smash yesterday to have a look to see smash yesterday to have a look to see smash yesterday to have a look to see how I how I how I did I've got some feedback for you Scott did I've got some feedback for you Scott did I've got some feedback for you Scott uh oh 18 years ago you were a bad

  14. uh oh 18 years ago you were a bad uh oh 18 years ago you were a bad developer well developer well developer well no no no um well well yes well no so here's um well well yes well no so here's um well well yes well no so here's here's the thing right so if you're if here's the thing right so if you're if here's the thing right so if you're if your application is 100% WPF then that your application is 100% WPF then that your application is 100% WPF then that 30 seconds boom is just going to work 30 seconds boom is just going to work 30 seconds boom is just going to work but your application isn't 100% WPF no but your application isn't 100% WPF no but your application isn't 100% WPF no it calls a bunch of pean vokes it cheats it calls a bunch of pean vokes it cheats it calls a bunch of pean vokes it cheats and it calls to win 32 apis at hour and it calls to win 32 apis at hour and it calls to win 32 apis at hour actually some of them were undocumented actually some of them were undocumented actually some of them were undocumented as I as I as I recall so that makes life a little more recall so that makes life a little more recall so that makes life a little more interesting so you've got dependencies interesting so you've got dependencies interesting so you've got dependencies on win mm which I guess is for audio on win mm which I guess is for audio on win mm which I guess is for audio stuff you've got I didn't know how to stuff you've got I didn't know how to stuff you've got I didn't know how to play audio I wanted it to sing and play play audio I wanted it to sing and play play audio I wanted it to sing and play baby SM I didn't know how to play a wave baby SM I didn't know how to play a wave baby SM I didn't know how to play a wave file yeah well you know that makes our file yeah well you know that makes our file yeah well you know that makes our life slightly more challenging than it life slightly more challenging than it life slightly more challenging than it it needs to be you've got dependencies it needs to be you've got dependencies it needs to be you've got dependencies on win 30 uh user 32 and then you I on win 30 uh user 32 and then you I on win 30 uh user 32 and then you I think you're using speech synthesizer as think you're using speech synthesizer as think you're using speech synthesizer as well so and in terms of the zaml if we well so and in terms of the zaml if we well so and in terms of the zaml if we look at your main window. zaml it's 106 look at your main window. zaml it's 106 look at your main window. zaml it's 106 lines of of zaml so you know it's not in lines of of zaml so you know it's not in lines of of zaml so you know it's not in terms of the UI I don't think your terms of the UI I don't think your terms of the UI I don't think your problem for going crossplatform is problem for going crossplatform is problem for going crossplatform is rebuilding the UI I think your your rebuilding the UI I think your your rebuilding the UI I think your your cross Bas yeah I think your challenge is cross Bas yeah I think your challenge is cross Bas yeah I think your challenge is elsewhere so we could take your app and elsewhere so we could take your app and elsewhere so we could take your app and make it run on xpf but we would need to make it run on xpf but we would need to make it run on xpf but we would need to like re architect some of the the like re architect some of the the like re architect some of the the approaches so we would probably want to approaches so we would probably want to approaches so we would probably want to use dependency injection in order to to use dependency injection in order to to use dependency injection in order to to pass in a crossplatform way of uh pass in a crossplatform way of uh pass in a crossplatform way of uh playing audio for example so on Windows playing audio for example so on Windows playing audio for example so on Windows we could keep using wind mm but then on we could keep using wind mm but then on we could keep using wind mm but then on uh Mac OS we would use the native Mac OS uh Mac OS we would use the native Mac OS uh Mac OS we would use the native Mac OS apis or maybe we'd go and find a a

  15. apis or maybe we'd go and find a a apis or maybe we'd go and find a a crossplatform crossplatform crossplatform audio playback uh library that we can audio playback uh library that we can audio playback uh library that we can use everywhere but for your app because use everywhere but for your app because use everywhere but for your app because the the complexity isn't existing within the the complexity isn't existing within the the complexity isn't existing within that UI level you're going to have to do that UI level you're going to have to do that UI level you're going to have to do some work to get it to run on on Mac and some work to get it to run on on Mac and some work to get it to run on on Mac and Linux but for other customers or other Linux but for other customers or other Linux but for other customers or other users of xpf often the most complex part users of xpf often the most complex part users of xpf often the most complex part is the UI they've got dependencies on is the UI they've got dependencies on is the UI they've got dependencies on teric or Dev Express hugely complicated teric or Dev Express hugely complicated teric or Dev Express hugely complicated user interfaces and the the platform user interfaces and the the platform user interfaces and the the platform integration is very minimal they might integration is very minimal they might integration is very minimal they might using the registry which is super easy using the registry which is super easy using the registry which is super easy for us to provide a shim for that so for us to provide a shim for that so for us to provide a shim for that so that it just works yeah but yeah the the that it just works yeah but yeah the the that it just works yeah but yeah the the key problem that they have is the UI not key problem that they have is the UI not key problem that they have is the UI not the other bits right in the case of baby the other bits right in the case of baby the other bits right in the case of baby smash uh I've done similar work to try smash uh I've done similar work to try smash uh I've done similar work to try to Port it and it really is quite simple to Port it and it really is quite simple to Port it and it really is quite simple you just need to start commenting stuff you just need to start commenting stuff you just need to start commenting stuff out so anytime I do something dumb you out so anytime I do something dumb you out so anytime I do something dumb you comment it out baby smash was comment it out baby smash was comment it out baby smash was interesting because it would prevent the interesting because it would prevent the interesting because it would prevent the user from alt f4 it would try to grab so user from alt f4 it would try to grab so user from alt f4 it would try to grab so I grab the keyboard and then I had had I grab the keyboard and then I had had I grab the keyboard and then I had had speech synthesis because if the kid speech synthesis because if the kid speech synthesis because if the kid typed a word accidentally like they type typed a word accidentally like they type typed a word accidentally like they type dog but they're baby it would stop dog but they're baby it would stop dog but they're baby it would stop recognize that that was a word and then recognize that that was a word and then recognize that that was a word and then say the word dog so I would need speech say the word dog so I would need speech say the word dog so I would need speech synthesis you could comment that out and synthesis you could comment that out and synthesis you could comment that out and then I needed a play wave files and I'm then I needed a play wave files and I'm then I needed a play wave files and I'm sure we could find a simple API to play sure we could find a simple API to play sure we could find a simple API to play W file so you would basically like pound W file so you would basically like pound W file so you would basically like pound Define your way to Glory yeah and then Define your way to Glory yeah and then Define your way to Glory yeah and then you you You' do a build and three you you You' do a build and three you you You' do a build and three different um binaries would pop out a different um binaries would pop out a different um binaries would pop out a Windows a Linux and a a Mac exactly that

  16. Windows a Linux and a a Mac exactly that Windows a Linux and a a Mac exactly that so actually I managed to get your app to so actually I managed to get your app to so actually I managed to get your app to to build and run on my mag the only bit to build and run on my mag the only bit to build and run on my mag the only bit I actually had to comment out um was I actually had to comment out um was I actually had to comment out um was speed synthesizer yeah because you got speed synthesizer yeah because you got speed synthesizer yeah because you got to go and find the apis to do that to go and find the apis to do that to go and find the apis to do that exactly that so once I commented that exactly that so once I commented that exactly that so once I commented that out it it built and it was you know out it it built and it was you know out it it built and it was you know pushing pixels on my screen and how long pushing pixels on my screen and how long pushing pixels on my screen and how long did that take uh it took me maybe five did that take uh it took me maybe five did that take uh it took me maybe five minutes tops I was looking for an hour minutes tops I was looking for an hour minutes tops I was looking for an hour hour and a half but no that's pretty hour and a half but no that's pretty hour and a half but no that's pretty cool I mean commenting out code is easy cool I mean commenting out code is easy cool I mean commenting out code is easy this yeah commenting out code is this yeah commenting out code is this yeah commenting out code is refactoring via subtraction refactoring via subtraction refactoring via subtraction that's the best thing that's fantastic that's the best thing that's fantastic that's the best thing that's fantastic so five minutes to get baby Smash and so five minutes to get baby Smash and so five minutes to get baby Smash and now by the way the baby is going to now by the way the baby is going to now by the way the baby is going to college this year so uh but the but the college this year so uh but the but the college this year so uh but the but the application lives on and I literally see application lives on and I literally see application lives on and I literally see people doing this like talking about people doing this like talking about people doing this like talking about baby smash even now when their babies baby smash even now when their babies baby smash even now when their babies get born so this is pretty cool I love get born so this is pretty cool I love get born so this is pretty cool I love that that the baby's going to end up that that the baby's going to end up that that the baby's going to end up being 30 and there's still going to be being 30 and there's still going to be being 30 and there's still going to be babies B this we should definitely do babies B this we should definitely do babies B this we should definitely do this so let me ask you this does is it this so let me ask you this does is it this so let me ask you this does is it only Mac Linux and windows maybe I want only Mac Linux and windows maybe I want only Mac Linux and windows maybe I want to do like web assembly we have internal to do like web assembly we have internal to do like web assembly we have internal build of web assembly so targeting net 8 build of web assembly so targeting net 8 build of web assembly so targeting net 8 we need to do some refactors for the new we need to do some refactors for the new we need to do some refactors for the new threading model for net 9 because wazim threading model for net 9 because wazim threading model for net 9 because wazim is kind of an everm moving Beast so yeah is kind of an everm moving Beast so yeah is kind of an everm moving Beast so yeah web assembly is working we have perfu I web assembly is working we have perfu I web assembly is working we have perfu I don't know if you know that app M perf don't know if you know that app M perf don't know if you know that app M perf is great yeah we have that running in is great yeah we have that running in is great yeah we have that running in the browser that's pretty exciting um we the browser that's pretty exciting um we the browser that's pretty exciting um we also have IOS and Android coming um also have IOS and Android coming um also have IOS and Android coming um again internal previews we see more again internal previews we see more again internal previews we see more demand for browser which kind of makes demand for browser which kind of makes demand for browser which kind of makes sense but yeah we kind of Focus right sense but yeah we kind of Focus right sense but yeah we kind of Focus right now on the desktop of things we've got now on the desktop of things we've got now on the desktop of things we've got one or two Engineers focused on Wasim

  17. one or two Engineers focused on Wasim one or two Engineers focused on Wasim and then mobile is kind of the the and then mobile is kind of the the and then mobile is kind of the the Forgotten child right at the second but Forgotten child right at the second but Forgotten child right at the second but all these things are possible like you all these things are possible like you all these things are possible like you said it's just a matter of doing a lot said it's just a matter of doing a lot said it's just a matter of doing a lot of really hard tech and it's all it's of really hard tech and it's all it's of really hard tech and it's all it's it's definitely all possible the the it's definitely all possible the the it's definitely all possible the the challenge with Wasim is that it's the challenge with Wasim is that it's the challenge with Wasim is that it's the most it's browser is the most locked most it's browser is the most locked most it's browser is the most locked down platform like it's it's actually down platform like it's it's actually down platform like it's it's actually really difficult to build for um you've really difficult to build for um you've really difficult to build for um you've got threading considerations and you got threading considerations and you got threading considerations and you know when you think about how dialogues know when you think about how dialogues know when you think about how dialogues work and you know on browser they need work and you know on browser they need work and you know on browser they need to be async but that's not going to work to be async but that's not going to work to be async but that's not going to work with your standard WPF app and then with your standard WPF app and then with your standard WPF app and then you've got single view most WPF apps are you've got single view most WPF apps are you've got single view most WPF apps are going to open a window and how do you going to open a window and how do you going to open a window and how do you deal with that in a in a Wasim deal with that in a in a Wasim deal with that in a in a Wasim application so yeah there's uh there's application so yeah there's uh there's application so yeah there's uh there's considerations and problems that we need considerations and problems that we need considerations and problems that we need to solve before we're happy to start to solve before we're happy to start to solve before we're happy to start shipping that to people but we're shipping that to people but we're shipping that to people but we're working on it that brings up a really working on it that brings up a really working on it that brings up a really interesting point which kind of as a interesting point which kind of as a interesting point which kind of as a call back to the beginning of the call back to the beginning of the call back to the beginning of the conversation where when they make conversation where when they make conversation where when they make assumptions when they said the W and WPF assumptions when they said the W and WPF assumptions when they said the W and WPF it wasn't just just about apis it's also it wasn't just just about apis it's also it wasn't just just about apis it's also about interaction models so there's a about interaction models so there's a about interaction models so there's a modal dialogue there's a modess dialogue modal dialogue there's a modess dialogue modal dialogue there's a modess dialogue this is full screen this is not that's this is full screen this is not that's this is full screen this is not that's not a Windows thing it's just kind of a not a Windows thing it's just kind of a not a Windows thing it's just kind of a UI philosophy so you're going to Port UI philosophy so you're going to Port UI philosophy so you're going to Port this I understand to Samsung tyen which this I understand to Samsung tyen which this I understand to Samsung tyen which is a television and if someone brings up is a television and if someone brings up is a television and if someone brings up a modal dialogue box they're going to a modal dialogue box they're going to a modal dialogue box they're going to make assumptions about what can you make assumptions about what can you make assumptions about what can you switch away are you waiting are you switch away are you waiting are you switch away are you waiting are you spinning waiting like all of these spinning waiting like all of these spinning waiting like all of these things are going to need to be things are going to need to be things are going to need to be reimplemented this is a really reimplemented this is a really reimplemented this is a really interesting point and it's something interesting point and it's something interesting point and it's something I've been talking about for years at I've been talking about for years at I've been talking about for years at this point there is I think this point there is I think this point there is I think crossplatform there's crossplatform and

  18. crossplatform there's crossplatform and crossplatform there's crossplatform and then there's cross Paradigm and they are then there's cross Paradigm and they are then there's cross Paradigm and they are not the same thing and if you want 100% not the same thing and if you want 100% not the same thing and if you want 100% code reuse you must hate your users code reuse you must hate your users code reuse you must hate your users because there is no way that 100% of because there is no way that 100% of because there is no way that 100% of your desktop application code is going your desktop application code is going your desktop application code is going to work well on an iPhone or is it going to work well on an iPhone or is it going to work well on an iPhone or is it going to work well on your television or in to work well on your television or in to work well on your television or in the browser you need to understand that the browser you need to understand that the browser you need to understand that the way that the user is going to the way that the user is going to the way that the user is going to interact with your application is unique interact with your application is unique interact with your application is unique to the device and operating system that to the device and operating system that to the device and operating system that they're using and so we we encourage they're using and so we we encourage they're using and so we we encourage code reuse but we I I personally don't code reuse but we I I personally don't code reuse but we I I personally don't want to see 100% code reuse if you're want to see 100% code reuse if you're want to see 100% code reuse if you're using 100% of your code across every using 100% of your code across every using 100% of your code across every platform then you're doing it wrong platform then you're doing it wrong platform then you're doing it wrong you're shipping subpar experiences to you're shipping subpar experiences to you're shipping subpar experiences to your users that's a great point because your users that's a great point because your users that's a great point because I think people love to say that but I think people love to say that but I think people love to say that but they're asking the wrong questions they're asking the wrong questions they're asking the wrong questions that's not what you want to do you think that's not what you want to do you think that's not what you want to do you think you want to do that but you really don't you want to do that but you really don't you want to do that but you really don't want to do that and you're right it is want to do that and you're right it is want to do that and you're right it is about the balance if you can get maybe about the balance if you can get maybe about the balance if you can get maybe 70 or 80% code reviews then you're doing 70 or 80% code reviews then you're doing 70 or 80% code reviews then you're doing a great job in my opinion yeah I think a great job in my opinion yeah I think a great job in my opinion yeah I think you can get even higher than that if you you can get even higher than that if you you can get even higher than that if you architect well but I I just think that architect well but I I just think that architect well but I I just think that you know the general way of a desktop you know the general way of a desktop you know the general way of a desktop application I look at my Mac with application I look at my Mac with application I look at my Mac with Catalyst and I see apple you know with I Catalyst and I see apple you know with I Catalyst and I see apple you know with I consider them to have infinite resources consider them to have infinite resources consider them to have infinite resources at this point some of the newer apps at this point some of the newer apps at this point some of the newer apps that are on my Mac is just iPhone apps that are on my Mac is just iPhone apps that are on my Mac is just iPhone apps and the experience it's subpar it isn't and the experience it's subpar it isn't and the experience it's subpar it isn't as good as it used to be when people as good as it used to be when people as good as it used to be when people were building apps using appkit I don't were building apps using appkit I don't were building apps using appkit I don't want an IOS app on my Mac I want a want an IOS app on my Mac I want a want an IOS app on my Mac I want a genuine genuine genuine complex native Mac application desktop complex native Mac application desktop complex native Mac application desktop Avalon is open source it's open core xpf

  19. Avalon is open source it's open core xpf Avalon is open source it's open core xpf is a is an add-on that you can pay for is a is an add-on that you can pay for is a is an add-on that you can pay for um and we talked about Enterprise um and we talked about Enterprise um and we talked about Enterprise developers but um what about me I'm an developers but um what about me I'm an developers but um what about me I'm an indie developer baby smash does not make indie developer baby smash does not make indie developer baby smash does not make a lot of money nor does it have a lot of a lot of money nor does it have a lot of a lot of money nor does it have a lot of users is there a solution for me well users is there a solution for me well users is there a solution for me well because it's you I'll give you a free because it's you I'll give you a free because it's you I'll give you a free license I I'll comp you one but for for license I I'll comp you one but for for license I I'll comp you one but for for your average Joe I think we need to be your average Joe I think we need to be your average Joe I think we need to be honest about the fact that XPS f is honest about the fact that XPS f is honest about the fact that XPS f is funding avalonia so we're a small team funding avalonia so we're a small team funding avalonia so we're a small team we're about nine people that are working we're about nine people that are working we're about nine people that are working full-time to build avalonia and that's full-time to build avalonia and that's full-time to build avalonia and that's expensive and we've historically expensive and we've historically expensive and we've historically generated revenue from services so generated revenue from services so generated revenue from services so support agreements with large support agreements with large support agreements with large Enterprises and porting their apps to Enterprises and porting their apps to Enterprises and porting their apps to avalonia so xpf is really a way for us avalonia so xpf is really a way for us avalonia so xpf is really a way for us to to generate the revenue to allow us to to generate the revenue to allow us to to generate the revenue to allow us to focus on building more for the to focus on building more for the to focus on building more for the community with avalonia so there's been community with avalonia so there's been community with avalonia so there's been a lot of asks around can you make a free a lot of asks around can you make a free a lot of asks around can you make a free version or can you make it open source version or can you make it open source version or can you make it open source and I'd love the answer to be yes but and I'd love the answer to be yes but and I'd love the answer to be yes but we're we're not in a position to do that we're we're not in a position to do that we're we're not in a position to do that you know we're not VC backed um we're you know we're not VC backed um we're you know we're not VC backed um we're we're a bootstraps small company so we we're a bootstraps small company so we we're a bootstraps small company so we created the inder because there's a a created the inder because there's a a created the inder because there's a a demand from smaller companies and some demand from smaller companies and some demand from smaller companies and some individuals to to have xpf but when when individuals to to have xpf but when when individuals to to have xpf but when when we look at the total number of WPF apps we look at the total number of WPF apps we look at the total number of WPF apps and then the slice that we're targeting and then the slice that we're targeting and then the slice that we're targeting we're targeting single digit percentage we're targeting single digit percentage we're targeting single digit percentage of the overall Market because we want of the overall Market because we want of the overall Market because we want most people to eventually use avalonia most people to eventually use avalonia most people to eventually use avalonia xpf is like a stepping stone to app

  20. xpf is like a stepping stone to app xpf is like a stepping stone to app modernization it's kind of helping those modernization it's kind of helping those modernization it's kind of helping those customers and users that right now they customers and users that right now they customers and users that right now they don't have the ability to spend three don't have the ability to spend three don't have the ability to spend three four months plus porting to avalonia or four months plus porting to avalonia or four months plus porting to avalonia or a new tech they just need to get onto a new tech they just need to get onto a new tech they just need to get onto Mac OS and limits quickly they'll they Mac OS and limits quickly they'll they Mac OS and limits quickly they'll they pay the price for that and that in turn pay the price for that and that in turn pay the price for that and that in turn helps us to go out and build more helps us to go out and build more helps us to go out and build more features for avalonia and the open features for avalonia and the open features for avalonia and the open source side very cool well you you made source side very cool well you you made source side very cool well you you made a special landing page for Hansel a special landing page for Hansel a special landing page for Hansel minutes listeners you can go to avalonia minutes listeners you can go to avalonia minutes listeners you can go to avalonia ui.net Hansel minutes you can check out ui.net Hansel minutes you can check out ui.net Hansel minutes you can check out xpf do a 30-day trial but again avalonia xpf do a 30-day trial but again avalonia xpf do a 30-day trial but again avalonia core you can go and check that out look core you can go and check that out look core you can go and check that out look at that that's all open source but I at that that's all open source but I at that that's all open source but I encourage folks to explore avalonia encourage folks to explore avalonia encourage folks to explore avalonia ui.net it's really cool and I am super ui.net it's really cool and I am super ui.net it's really cool and I am super impressed that you were playing with impressed that you were playing with impressed that you were playing with baby smash before our chat thank you for baby smash before our chat thank you for baby smash before our chat thank you for doing that this has been a lot of fun doing that this has been a lot of fun doing that this has been a lot of fun thank you so much Mike James thank you thank you so much Mike James thank you thank you so much Mike James thank you we've been talking to Mike James from we've been talking to Mike James from we've been talking to Mike James from avalonia check check them out avalonia avalonia check check them out avalonia avalonia check check them out avalonia ui.net this has been another episode of ui.net this has been another episode of ui.net this has been another episode of Hansel minutes and we'll see you again Hansel minutes and we'll see you again Hansel minutes and we'll see you again next week next week next week [Music]

Summary

This episode discusses Avalonia, an open-source UI framework named as a homage to WPF's codename "Avalon." The conversation highlights Avalonia's origin as a community project, its growth in popularity with thousands of contributors and stars on GitHub, and the practical takeaway being its accessibility for developers to build cross-platform applications.

View original episode ↗