# Linux/Advice to Windows users

Most non-Apple computer users are used to the Mircosoft Windows operating system, since it usually comes pre-included with computers. Should you wish to try out Linux, or install it on a live USB (which is difficult with Windows due to licensing restrictions), here are some considerations.

## Distributions

There are a variety of distributions of Linux, such as Mint, Ubuntu, and Arch. Due to varying user preferences, it is not possible to have "one big Linux" operating system for everyone.

## Workflow

When installing a program on Windows, the usual workflow is to visit a web site through a web browser and download an installer executeable (.exe or .msi file). While a similar concept exists on Linux, AppImage, the typical method of installing software is from repositories that are accessed by a locally installed package manager. This is usually done through the terminal, but a graphical application manager might be provided or installable.

## Terminal

When using Linux, you should familiarize yourself with the terminal (command prompt), since it contains useful and essential commands for searching and managing files, and listing and managing tasks. Examples for common commands include cp for file copying, mv for file moving and renaming, grep for text searching in one or multiple files (more functional than findstr from Windows CMD), find for file searching, wc for word and line counting, ls for file listing, ps for process listing, free for system memory (RAM) statistics, df ("disk free") for total disk usage statistics, and du for individual directories' disk usage.
All these tools are pre-installed as core utilities on Linux, so one can be certain that any computer running Linux has these available.
Like on Windows CMD, the output from terminal commands can be redirected into a text file for later viewing, by appending >> and a file name, with or without path, after the command. Additionally, the |tee -a pipeline allows both reading the output in the terminal window and storing it in a text file. Other pipelines are |head for showing the first ten lines only, |tail for the last ten lines, each with the -n parameter for a custom number of lines; |more for pausing after each screen height until a button is pressed, and |less for making the text scrollable using the arrow keys and pgUp and pgDn. |wc counts and shows the number of lines, words, and characters in the output to prevent a potentially large output from flooding the terminal window, and can also be used to approximately count files inside a folder (ls -r folder_name |wc).
Multiple pipes can be stacked onto each other. For example |grep can be used multiple times to filter lines by search terms, and then |less to make the results scrollable.
Aliases, variables, and functions are shortcuts which can be specified in the ~/.bashrc file which is loaded each time the terminal is opened. "~" is a shortcut for the home directory, usually located at "/home/username/". For example, the line alias RLF="readlink -f" creates the command RLF as a shortcut for readlink -f, dl=~/Downloads/ creates the shortcut variable $dl for the download folder, and mkcd { if [ ! -d "$@" ];then mkdir -p "$@" ;fi; cd "$@"; } creates a function command to create and enter a directory in one step. A starting working directory can also be set using the cd ("change directory") command.
Some interactive command-line utilities output and update information directly in the terminal window, such as top and htop for monitoring processes, and iotop for monitoring disk speed usage.
Aliases can also be used to set default parameters or change the behaviour of commands. For example, alias clear="sleep 5;clear" adds a five-second delay to clearing the terminal when using the clear command to allow for interruption when accidentally entered, and cp=cp -n -p -v causes the cp command to be run with the parameters for not overwriting ("no clobber"), for preserving the date and time stamps ("preserve"), and for printing each copied file into the terminal ("verbose").
Command parameters can sometimes be combined. For example, ls -a -l -R has the samee effect as ls -alR.
Using the terminal can be somewhat more difficult at the beginning, but once you are familiar with the commands, getting some tasks done can be faster through the terminal than through graphical user interfaces. For example, once you are somewhat familiar with the parameters of the ffmpeg command-line utility, multimedia conversion can be launched quickly and conveniently through the terminal. So-called wildcard characters such as asterisks ("*") and question marks ("?") allow for the convenient selection of multiple files.
Third-party graphical user interfaces that make use of command-line interface software exist, such as "gparted" for the "parted" command-line utility.

## Proprietary software

Some vendor-specific software might not be provided for Linux due to its relatively small user base compared to Windows. Such includes software for controlling the lighting of peripherals like USB keyboards and mice or built-in laptop keyboards, or printer and scanner drivers and control software. Third-party workarounds may or may not exist.
Printers and scanners should support the generic scanning and printing tools pre-included with Linux, but those might not be able to make use of all features of the scanner or printer.
Some professional software such as that by Adobe has limited support for Linux. The "Wine" utility that aims to support Windows software under Linux does not work with all software, so it is not guaranteed to work with a popular proprietary software you might be using. Consider seeking and familiarizing yourself with open-source cross-platform alternatives. Should they lack some functionality, consider filing feature requests at the developers' bug tracker sites.

## Graphics

Windows computers typically have the driver for the GPU (graphical processing unit) out of the box, since vendors of Windows computers typically pre-install the graphics driver that matches the graphics card. On Linux, a graphics driver usually has to be installed manually by the user, and video player software and web browsers might have to be configured to make use of it.
Support for very recent graphics cards might be delayed.
Most tasks can be completed without a graphics driver, but playback of video is more power-efficient through the purpose-built graphics card, also known as "hardware decoding", than the more generic CPU (central processing unit), also known as "software decoding". Encoding tasks finish faster and consume less power through hardware encoding.
The CPU (software decoding) might not even be able to play back video at high resolutions such as 4K 2160p smoothly, and the lower efficiency could cause the cooling fans to spin up and is especially detrimental to battery-powered video playback.
Before connecting or disconnecting an untested external monitor for the first time, make sure to save any unsaved information such as text documents beforehand. There might be compatibility issues with some graphics cards, causing your screen(s) to black out and enforcing a reboot, meaning any unsaved information would be lost. If no screen blackout occurs, you can connect and disconnect that monitor safely.

## Dependencies

On Windows, software libraries are typically bundled with downloaded software. On Linux, so-called shared objects (".so" files) are preferred. While this allows for a more efficient memory usage due to less duplication, you might run into what is known as the dependency hell. If software developers are uncooperative, they might make their software dependent on different versions of shared libraries. Usually, these can be installed simultaneously, but not in all cases. This is known as "conflicting dependencies". Should any dependencies be missing, a package manager might refuse to install any new software. As of 2022, this problem has not been solved yet.
Here is an example of the terminal output when dependency errors occur: