New Linux Distro of Choice and app thoughts.

Last night I was trying to find a new Linux distro to use inside of a VM to do my dev for my next project, which I'm hoping will be in full swing while I'm on vacation from work. The craziness is just how hard such a simple task seems to be.

The first few tests which included Lubuntu, Ubuntu Budgie and one other that eludes me at the moment all failed after updating in various ways. All were slow, even with the Virtual Box guest additions were properly installed and running. And 2/3 stopped loading entirely after updating the OS. The last one of those I tried, was I believe Ubuntu Budgie. It continued to "work" after the upgrade, but certain core screens stopped showing any content.

Linux Mint ran on the first go. And updated. But, it was slow. Even, again, once the guest additions were installed and running.

Enter MX Linux. When I heard this had some of the same guys as Antix I got a little happy. While Antix was ugly as sin, it is the ONLY Linux distro I've loaded up on my old Dell tablet which installed properly out of the box and doesn't hang at random. It was also fast and reliable that old Atom BayTrail box. MX Linux looks a little more modern. I had high hopes. I expected them to be dashed. They were not.

MX Linux worked. Worked after upgrading. And ran the smoothest of all the distros... even with Guest Additions installed (either that, or they were automatically loaded both in the Live OS and on first install).

This is a VM, graphics performance isn't paramount. I won't be gaming on this. But, being unable to move windows around without screen tearing, or scrolling smoothly; those are the sorts of issues I was having in the other distros and those sorts of performance issues are deal breakers.

To illustrate how bonkers this all is. I'm assigning my VMs 8GB of RAM, enabling 3D acceleration with the max 128MB of graphics memory. My CPU supports virtualization and it is enabled in the BIOS and running in the VMs. I'm allotting 4 CPUs on my Ryzen 1700 at 100% use. And I'm mostly running lower requirement variants of Linux. Not Ubuntu with the new Gnome Shell or even KDE. Budgie, Cinnamon and F***ING Lubuntu.

Lubuntu... aside from hanging randomly, runs LIGHTNING fast on my Atom tablet with 2GB RAM and a PoS SoC and a crappy MMC hard drive.

Disclaimer... I still have 8GB left in RAM for the host system. The 200GB I assigned for them to use isn't anywhere near constraining the host, and it is an 8 core CPU. In short, not only am I giving the guest OS a lot of resources. I'm not doing it at the expense of the host OS either.

Clearly I can't blame the distros for everything. The virtualization layer is clearly not ideal. I know these distros run MUCH faster when not virtualized. Even on MUCH crappier hardware. The point is, though, my expectations aren't exactly all that high and I'm offering up a lot of resources.

I want a dev environment for my app. So, I'm giving it decent RAM and decent access to the CPU. I would like it to compile some time this month when I kick it off. I'm giving it plenty of space for a healthy OS install and storage for my needs. From a performance standpoint, I just want the UI to run smoothly and on a modern enough OS to run what I need.

Which brings me full circle to the app itself. I've changed my mind. Technology wise, I'm going to roll with Docker and .Net Core. It makes the server side less user friendly perhaps. But, deployments will be more OS agnostic and easier to migrate. Perhaps more than anything, they are technologies we're migrating to at work. And a great motivator has always been having a project which leverages skills I feel that I need to learn.

I'm also not super sad about losing user friendliness. At the end, I want a system which can drive multiple UIs on lower spec hardware like my aforementioned shitty Dell tablet. So, I'm looking at a centralized server with complex configuration for multiple rooms/zones/whatever. It was never going to be totally user friendly.

I want a centralized server, running an MQ driven application. Components both server and client side will be MQ driven. With module providing the publishers and subscribers. Data will be centralized so that clients get data from the server rather than going direct. This will save on bandwidth and throttling issues. One concern with MagicMirror was that the module ran on the clients. So, my weather API keys could get temporarily blocked if I made too many calls. My bandwidth was wasted on Nest because each client was continually requesting new images/video.

I want the server to retrieve that data and either publish it to queue which the clients can then consume from, or publish it to a local data store and the clients can publish requests to get it from there. In many cases, it will probably support both.

Anyway, that is all. For now.

Comments

Popular Posts