I have been a vocal supporter of the Microsoft Surface line for some years now. You may have seen my post about the joys of the Surface Go or been one of those viral readers that almost took my server down when I posted my impressions of the Surface Pro X. Since 2015 I had the Surface 3, Surface 4 Pro, Surface Go, and Surface Pro X, and loved all of those machines, yes even the Surface 3.
These last five years have with Windows 10 have been a wild ride. I was not familiar with previous Windows versions. I used Windows 95 for a while, but as a Kid, I didn’t dabble much in it. I got my first Macintosh — an iBook G3 indigo blue — in 1999 or 2000; I don’t recall the exact year but, from that day till 2015, I was an Apple user. Even after getting my Surface 3, I was still using the Mac as primary. The Surface was for fun and comics. I only started to use Windows 10 as my primary device when I got the Surface 4 Pro. So even though many recent developer friends know me as that guy using a Surface, I was that guy using an Apple for a much longer period. I used to develop desktop apps for MacOS 9 and run betas of MacOS X before release. Macs are very familiar to me, have always been.
Still, I really enjoy my Surface devices. What I love about them is not the software, it is the hardware. I’m in love with the form-factor. I still glee when I switch from laptop to tablet, from keyboard input to pen. Windows 10 is good enough, doesn’t annoy me much, doesn’t prevent me from enjoying the ultra mobile experience the Surface line provides.
The fun ride starts its descent into the realm of frustration with the Surface Pro X. I got it before the pandemic and I paid for all the upgrades I could. It has a ton of space, 4G, and a pretty decent battery-life. I live in London and my plan was to use it to work from parks and coffee shops without the need to worry about Wi-Fi or power sockets. It delivered marvelously on this promise; it was an exceptional experience.
The experience degrades when you approach it as a developer. If you’re a Web Developer, that machine has you covered. With the WSL2 — Windows Subsystem for Linux — you have AARCH64 Ubuntu just a click away. Unite that with the remote connection from VSCode (connecting from Windows 10 to the WSL) and it becomes a productivity powerhouse. If you’re a Web Developer, it is a damn great machine.
The problem begins when you’re like me and love desktop apps. Don’t get me wrong, I work as a Web Developer, I love the Web. I just don’t think that everything needs to be Software as a Service or an Electron Application. Wanting local desktop apps in a machine with a snapdragon-based CPU and 4G always-on connection might sound wrong, but desktop apps are usually quite lightweight and require fewer resources than running something over the internet. More than using desktop apps, I enjoy creating them. I’m tired of being a Web Developer, I’m frustrated with the modern Web Development stack. I miss the experiences I had 20 years ago where you could assemble a good-looking app without being a designer just by using a nicely packaged development experience like XCode/Cocoa. I miss well designed, comprehensive GUI frameworks.
Some of you might think that running VS2019 and doing dotnet apps would be the way to go for me, and let me be honest, I thought so too. I watched Microsoft Build keynotes and talks. I got excited about tech and impressed by the new WinUI stuff. But that doesn’t work on the Surface Pro X. The desktop apps part of the development experience is all missing. There is no native support for winforms, wpf, WinUI. Visual Studio doesn’t see the local machine as a viable target at all. When I asked how to develop desktop apps for ARM64 on a Microsoft Forum, the answer was to use two machines, one x86–64 machine to develop and the ARM64 machine for remote debugging, and that the only available paradigm was UWP. Microsoft has a lot of qualities, I’m specially impressed with how it keeps retrocompatibility with itself but, having so many toolkits and options might frustrate to a new developer because there are no guidelines on their docs on how to use a Surface Pro X to create desktop apps. It is a 15gigs machine with a kick-ass CPU running a full Windows 10 experience, I should be able to use it for development but I can’t.
It has been more than a year since the Surface Pro X launch, there is even a new version out there, and there is no native support for being a desktop application developer. There is no x64 emulation. You can’t port apps to it because of the missing GUI stuff. You can’t develop apps for it from it because VS2019 is stupid. You can’t run the apps you need because they don’t offer x86–32 versions anymore and don’t offer native ARM64 versions either. I’m tired of waiting for Microsoft to get its act together and make this platform be all it can be.
The last nail in this coffin has been the release of M1-based Macs. Apple is an expert in doing these ISA transitions. I was a Mac user during the PowerPC to Intel transition, and it was mostly fine. This time it appears the experience is even better. From day one they have all the development experience working and have x64 translation so you can run your favourite apps. It is no secret that I want to work more with content than with development. I see myself as a storyteller; I enjoy writing and doing videos. I am also a developer, but that is just so I have delightful stories to tell and can pay the bills. My content creation apps are not available for the Surface Pro X, but all of them run on the new M1 Macs, some are even native. The few apps I have to support my writing on the Surface Pro X are running under emulation, no one bothered porting to Windows on ARM. There is no good video editor for the Surface Pro X, you can’t use it for video production at all, which is why there are no new videos in my YouTube channel (rendering video on my Surface Go takes all day).
I have a simple entry-level MacBook from 2019 here. This week I upgraded it to Big Sur and was positively surprised after the catastrophe that was macOS Craptalina. Yesterday evening I launched XCode and did the official SwiftUI tutorial from Apple. Bear in mind that the last time I used XCode it was the early days of MacOS X and I was programming in Objective-C. I don’t know Swift, nor have I been exposed to any mac GUI stuff after nibfiles. In couple hours I had a nice looking iOS application. The experience was good and Swift is not too bad. I wonder if SwiftUI can be used to ship desktop apps…
I really enjoy developing for the Mac, always did. In my 20s, with barely any knowledge of programming, I could create ugly-but-functional apps like this early alpha below (that was my very first Objective-C/Cocoa application):
In those days, I moved away from Objective-C/Cocoa because the market for such freelance development didn’t exist in Brazil. I ended up using cross-platform toolkits and languages so that I could develop on a Mac and deploy to Windows or Linux. I wonder what my life would have looked like if I kept doing native development. These days Macs are much more popular than twenty years ago, I can see a potential market for passive income from small desktop apps. Something to build on my own time while I work on my books and videos.
Things the new M1-based MacBooks would allow me to do that I currently can’t:
- Run Blackmagic Design software such as DaVinci Resolve and the ATEM control software;
- Create simple desktop apps for my own amusement and maybe some passive income;
- Run the most recent versions of Scrivener and other applications focused on writers;
I’m tired of holding the Surface Pro X and watching its untapped potential. It is a wonderful machine, but Microsoft is placing all its effort into Web and Azure stuff. Desktop apps appear to be a forgotten land on that platform, an afterthought. I’d love to be able to use it for all my needs because that is an exciting machine but, a boring old laptop form-factor is the way forward for me. I need to use a machine that permits me to be who I want to be and not tie myself to something exciting, but that is holding me back.