Why I Left Ubuntu

Published: May 24, 2024

I recently upgraded to Ubuntu 20.04 LTS, but my experience wasn't as smooth as I'd hoped. Here's why I decided to switch back to Windows and my setup process for an optimal development environment.

Reasons for Switching Back to Windows

  1. NVIDIA GPU Drivers:

    • The upgrade to 20.04 LTS caused my system to stop working due to endless issues with NVIDIA drivers. Despite trying multiple versions (450, 460, 470), the problems persisted. I wasn't the only one, and many other people faced similar challenges.
    • The time I spent troubleshooting these issues on Stack Overflow or AskUbuntu could have been used more productively in my opinion.
  2. Proprietary Software:

    • I needed Adobe software for certain tasks, which meant dual-booting between Linux and Windows. This disrupted my workflow, especially when I had to switch for a quick edit.
    • Alternatives like OBS Studio and GIMP just didn't match the functionality and intuitiveness of Adobe products.
  3. Peripheral Support:

    • My peripherals, such as Razer Synapse and Logitech Studio, lacked proper software support on Linux. This advanced functionalities that are readily available on Windows.
    • My camera stopped working on Ubuntu, and I had to switch to Windows to use it for calls.
  4. Development Environment:

    • Although developing in the same environment as my deployment was beneficial, most of my work was containerized with Docker. Using Windows with WSL2 or Docker provided a similar experience without the extra hassle.
    • I faced issues with log management, where my syslog was getting too large, and I had to manually set up logrotate to force the logs to rotate and delete automatically if they reach a certain size.
    • Setting up VPNs and other utilities was more cumbersome on Ubuntu compared to the seamless installation and integration on Windows. It works, but it was slower to get going and required more manual setup.
  5. Application Availability:

    • The lack of certain applications, like Surfshark VPN and Notion, was inconvenient. While there are Linux alternatives, they often required additional setup and weren't as user-friendly.

Given these challenges, the benefits of using Ubuntu didn't outweigh the negatives for me. I decided to switch back to Windows, where I could focus more on coding and less on system maintenance. Coming back to Windows, I set up the fresh 2TB NVMe i had Ubuntu on as a dedicated Dev Drive. Coming back, this is a great resource to help you set up your development environment on Windows.

For developers interested in optimizing their Windows setup, here's how I configured my environment for a seamless development experience.

Adding Git Bash to Windows Terminal

From this Stack Overflow post, you can add Git Bash to Windows Terminal:

{
  "guid": "{00000000-0000-0000-ba54-000000000002}",
  "commandline": "%PROGRAMFILES%/Git/bin/bash.exe -i -l",
  "icon": "%PROGRAMFILES%/Git/mingw64/share/git/git-for-windows.ico",
  "name": "Bash",
  "startingDirectory": "%USERPROFILE%"
}

GitBash Aliases

To achieve the same functionality in PowerShell, you can create functions in PowerShell. For example, one that adds, commits, and pushes changes to your Git repository used to be:

alias gacp='f(){ git add . && git commit -m "$1" && git push; }; f'

In powershell, open your PowerShell profile script to add the function permanently. You can find your profile script by running notepad $PROFILE in PowerShell, adn then add the function as follows:

function gacp {
    param (
        [string]$message
    )
    git add .
    git commit -m $message
    git push
}

Dev Drive Setup

A Dev Drive utilizes the Resilient File System (ReFS) to optimize storage for development workloads, providing faster performance and customizable settings. The Resilient File System (ReFS) is a newer Microsoft file system format, designed to maximize data availability, scale efficiently to large data sets across diverse workloads, and provide data integrity with resiliency to corruption

The Dev Drive utilizes ReFS enabling you to initialize a storage volume specifically for development workloads, providing faster performance, and customizable settings that are optimized for development scenarios. ReFS contains several file system specific optimizations to improve the performance of key developer scenarios.

What to Store on Dev Drive

  • Source code repositories and project files
  • Package caches
  • Build output and intermediate files

What Not to Store on Dev Drive

  • Developer tools like Visual Studio, MSBuild, .NET SDK, etc.

Storing Package Cache on Dev Drive

A package cache is the global folder location used by applications to store files for installed software. These source files are needed when you want to update, uninstall, or repair the installed software.

  • Npm cache (NodeJS):

    • Create an npm cache directory on your Dev Drive, e.g., D:\packages\npm.
    • Set a global environment variable: setx /M npm_config_cache D:\packages\npm.
  • Pip cache (Python):

    • Create a pip cache directory on your Dev Drive, e.g., D:\packages\pip.
    • Set a global environment variable: setx /M PIP_CACHE_DIR D:\packages\pip.
    • Move existing cache contents from %LocalAppData%\pip\Cache to this directory.

Python & Poetry Installer

  • Install all versions of Python via the Microsoft Store.
  • Install pipx as per the pipx documentation.
  • Install Poetry and adjust the local cache configuration:
    • View current config: poetry config --list.
    • Set cache directory: poetry config cache-dir "D:\\packages\\pypoetry".

Final Thoughts

Switching back to Windows has streamlined my development workflow, allowing me to focus on coding rather than troubleshooting. While Linux has its merits, the stability and support of Windows make it a better choice for my needs right now. For more detailed information on setting up your development environment on Windows, check out this great resource.