Bye VMware ESXi, Hello Proxmox VE!

As you may -or may not- know, I manage my own server farm. This farm is composed of several virtual machines hosted on a physical server (an HPE ProLiant one). I’ve used ESXi for the past several years, but I’ve decided to move away from it for several reasons.

I – The context

The physical server is located at home (I’m self hosted). It’s mounted into a medium-sized rack cabinet in a room, with a UPS. This physical server runs multiple virtual machines, and I’ve listed some of them below:

  • The backbone infrastructure (LAN): a DNS server for resolving my internal machines’ names and a SMTP relay so that I can be notified when an event occurs somewhere in the system, like automatic security updates ;
  • The website infrastructure (DMZ): a SQL server, a file server with the webroot, two web servers for HA and load balancing, and a reverse proxy reachable from the Internet.

II – The reasons

VMware ESXi is an enterprise-grade type-1 hypervisor and it gets the job done, not gonna lie. But there are some downsides that prevent a lot of people from using it in a lab or semi-professional environment like I used to do until now:

  • The licenses’ prices are crazy high (there’s a free license but it comes with limits);
  • There’s no integrated backup solution (*wink* Veeam *wink*);
  • ESXi can run on unsupported, retail hardware, but the requirements leave some older machines aside;
  • HPE ProLiant servers (Gen8 and up) can’t run a vanilla ESXi, an ISO issued from HPE that integrates the required drivers has to be used;
  • HPE only certifies the latest servers for VMware and releases ISOs for these servers accordingly.

Do you see the problem? Even tho your older HPE server behaves just fine and can still handle modern operating systems, like Windows Server 2019 for instance, HPE won’t build ISOs of the latest ESXi for them.

According to HPE and VMware, my server can run ESXi up to 6.0. I’ve been able to use ESXi 6.5 because the HPE-issued ISO contained the required drivers for my server but it hasn’t been certified for this specific model. ESXi 6.7 has been released a few months ago but I can’t use it without doing some wizardry I’ve seen on the internets because the latest HPE ISOs don’t have the needed drivers. ESXi 6.5 won’t receive security updates after November 15, 2021. So my only choice would have been to purchase a new server and install a newer ESXi by then.

But here comes Proxmox VE:

  • It’s based on Debian with a customized, fine-tuned Linux kernel from Ubuntu;
  • It’s Open Source;
  • It supports a large variety of hardware;
  • It supports virtual machines (with KVM) and containers (with LXC);
  • It supports ZFS;
  • The requirements are quite low;
  • It has an integrated backup solution;
  • It has an integrated firewall;
  • You can create clusters of hosts running Proxmox VE;
  • It’s free, and you can subscribe to an enterprise support service so the Proxmox team can come to the rescue if something goes horribly wrong and the community alone can’t help.

III – Moving away

Since Debian 10 “Buster” was released this year, Proxmox VE has been updated as well to use this new version as its base system. Moreover my VMs were running Debian 9, so it was the perfect time to start using Debian 10 as well.

I didn’t migrate the VMs from ESXi to Proxmox VE (although you can import VMs from VMware’s virtualization suites, not only ESXi). Instead, I exported the most important configuration files and the website’s data (SQL + webroot) and recreated the entire virtualized infrastructure from scratch after erasing the disks and installing Proxmox VE.

Proxmox VE’s Web GUI can be somewhat confusing or overwhelming at times, but it’s fast, lightweight and you’ll get used to it. Sure, you’ll maybe have to use the CLI for advanced tasks more often than before than with ESXi, but the integration of xterm.js and other console viewers like noVNC makes it incredibly easy to do so, with the comfort of you web browser and without the need of a SSH access. And when using the CLI, you get the power of the Debian 10 beneath Proxmox VE.

IV – Final note

In my use case, Proxmox VE has the following advantages:

  • Integrated backup solution means no more 3rd party software to pay for;
  • Completely Open Source and no additional fees for additional features;
  • With ZFS I can put my hard disk drives in a RAIDZ-2 configuration, meaning that the pool can handle up to two disk failures before being unrecoverable (drives where on a RAID10 configuration when ESXi was installed, with a limit of one faulty disk at a time);
  • Once Proxmox VE is fully loaded and the VMs are on, everything becomes really fast: ZFS uses RAM as a cache, and it stores the data you use most frequently inside for faster access times. And when you want to write something to the disk, it gets stored in RAM, and ZFS writes it physically in the background at the most appropriate time. And since the VMs and Proxmox VE itself are stored on a ZFS pool, everything benefits from this technology.

SwiftUI & Xcode 11 beta

Today, a rant against SwiftUI AND Xcode:

SwiftUI is neat. Really. I’ve seen talented people on Twitter showing what it’s already possible to achieve with it. I’m using it for upcoming projects, and it actually motivates me to move to Swift from Objective-C But.

I know Swift and I’ve written apps in Swift. But to me, Objective-C (or ObjC) is far more readable and easy to learn. I love ObjC. I use Swift. That’s a pretty big difference to me. I know, that’s against Apple’s marketing around Swift. I’ve always ended up writing the core of my apps and my private frameworks in ObjC, and satellite apps in Swift.

In fact, in Alvadi Classic, the frameworks that the app is built upon are ObjC (except for Charts that is written in Swift, but it’s a 3rd Party library). The watchOS app is built with Swift. But it’s a tiny satellite app revolving around an ObjC core.

When Apple introduced SwiftUI, I saw a lot of possibilities and the opportunity to jump on the Swift bandwagon. So I followed Apple’s tutorials and finally made a new project for an upcoming app that I plan to write entirely in Swift instead of ObjC and design the UI with SwiftUI instead of Interface Builder.

But.

The combination of SwiftUI and Xcode can be very frustrating. The horrendous errors that are throw for a small typo in a SwiftUI struct is very intimidating for a somewhat-accustomed-to-Swift developer. Let alone a newcomer to the wonderful world of software development…

Since the SDKs bundled in Xcode 11 are still in beta (and the IDE itself being in beta), I hope that Apple will improve it by the time they reach the Golden Master state.

GNU/Linux doesn’t deserve to be popular on desktop computers, and it’s OK

Don’t get me wrong: GNU/Linux is a great operating system, I use it daily along with macOS and Windows, there are marvelous distributions out there, and it is widely used by companies of all sizes for mission-critical tasks because it is known for its general stability and openness. It even runs on supercomputers. But when it comes to its popularity for the average, day-to-day users, these are the most frequently encountered problems:

  1. Fragmentation – The strength of GNU/Linux is also its weakness: There are plenty of different distributions of GNU/Linux available. Different kernels, different packaging methods, different user interfaces. When you’re an advanced user, having the liberty of choosing, or maybe even creating, an operating system that fits your needs is wonderful. As an average user, this means that there are too many choices, too many compromises to make. On the other side, that computer you saw at the mall earlier was running Windows 10 Home. Period.
  2. Politic – The GNU/Linux philosophy is not all about software. It is also highly political. As a consumer, the holy war between closed and open sourced software is definitely not your primary concern when you want a computer to download movies, browse Facebook and play games during your after-work time and on rainy weekends.
  3. Compatibility – What is the common point between the latest AAA game with dithyrambic reviews and that nice little indie software you saw on Twitter? Chances are that they won’t work out of the box on GNU/Linux. Software editors are targeting the most installed operating system globally, and it happens to be Windows. Same goes with drivers, hardware manufacturers will target Windows first. Cruel. And macOS is no exception.

These are reasonably easy to solve problems, and the solution would be to unite forces behind a common Linux-based operating system packed with open source software that could be considered as the state-of-the-art product that the open source community can build, with different forks for marginal use cases. IMHO, a distribution like Ubuntu from Canonical could fill that void. Unfortunately, it appears that the open vs closed source war is not enough: there are conflicts inside the open source community itself. Revolving around one major distribution seems impossible. The greater good is not the priority, and it’s a shame.

To me, GNU/Linux does not deserve to be popular on the desktop. They had their chance and now the desktop war is over. But it is not a fatality. There is a new playground coming, and it’s just around the corner.

In the Post-PC era, Linux (as a kernel) is the great winner. It powers Google Android, and Google Android powers the vast majority of the smartphones all over the globe. It even runs on televisions, cars and watches. How did Google do that? They took Linux, built their open source operating system around it (AOSP), added their closed source layer (Google Play Services) and pushed it on the market. Smartphone manufacturers and carriers saw the opportunity of jumping into the Android wagon: engineers could create drivers to make Android compatible with their hardware, add preinstalled apps and customize the user interface to the extreme (and I’m stressing the word extreme here). Have an agreement with Google? Your device can also access the proprietary but important stuff, like the Play Store, that your users will expect to find on their smartphone. And at each iteration, the system is getting better and better. Google built the reference Linux-based operating system for mobile devices, and forks exist for different use cases, like building custom ROMs for unsupported devices, running it on x86 computers or focusing on user privacy. And it worked.

So what’s the next big thing? It’s the Internet of Things. Connected cameras. Connected thermostats. Connected plugs. Connected locks. Connected wearable trackers of all kinds. Connected medical implants. They all are collecting data to be stored and analyzed on cloud computing platforms. Even if Linux is a natural candidate to lead this revolution, considering how well it performed in the Post-PC era and after gaining enough flexibility into supporting many hardware platforms, Microsoft, after their Windows Phone debacle in the smartphone market, is preparing its revenge with Windows 10 for IoT. These new connected objects will have to be easy to use, eco-friendly and highly secure to ensure that the customer’s private life is as safe as possible.

The war just begun.