我為什麼使用Linux做開發

LvLaoTou發表於2024-03-11

系統選擇


目前市面上主流的桌面作業系統在大多數人眼裡只有Windows和MacOS,那為什麼我沒選擇它們兩呢?

首先,不選MacOS的原因,就是太貴。當然這是我的原因不是蘋果的原因,我最早使用Linux寫程式碼的時候是2018年,那時候剛畢業上班不久,根本買不起Mac(雖然現在也覺得有點貴)。

在沒有接觸Linux之前,我也是使用Winows的。眾所周知,其實Windows也是收費的,那時候用的基本是破解版本的Windows系統。雖然當時買膝上型電腦會預裝Windows系統,但是預裝的基本都是家庭版。依稀記得當時Windows家庭版無法開啟某些Windows功能(沒記錯的話當時是無法開啟Windows的虛擬化功能),所以就算我買了預裝Windows系統的膝上型電腦,依然還是需要自行重灌Windows專業版系統,那時候就是使用啟用軟體破解Windows專業版。但是作為程式設計師,我個人是不喜歡去破解軟體的,因為我不想以後我寫的軟體也被別人破解。然後在某些機緣巧合之下,我加入了一些Linux愛好者社群,慢慢開始接觸Linux桌面。

重新認識Linux


我第一次接觸Linux是大學的課程,那時候教學用的是Centos。那時候在我印象中Linux就是黑乎乎的命令列視窗,只能部署一些服務端的的程式,畢業以後從事Java後端開發,接觸的Linux也是服務端版本,所以我根本不知道Linux還有桌面環境!

直到一次偶然的機會,在B站刷到一位大佬自己整活的Linux桌面,相當個性化,讓我深受震撼。然後就開始根據影片資訊去搜尋Linux桌面相關的知識,也因此加入了一些Linux社群,從此開始我的Linux桌面探險之旅。

Linux桌面


在開始介紹我的Linux探險之旅前,先簡單說一下Linux的組成,Linux的組成部分可以分為以下三個主要部分:

  1. Linux核心(Kernel): Linux核心是作業系統的核心,負責管理硬體資源,提供系統服務,以及允許軟體應用進行控制硬體的基礎。它是一個由Linus Torvalds在1991年首次釋出的開源軟體專案,至今仍在不斷的發展和更新中。GitHub - torvalds/linux: Linux kernel source tree
  2. Linux發行版(Distributions): Linux發行版是基於Linux核心的作業系統,包括了核心以及一套完整的軟體和應用程式,如GNU工具集、桌面環境、辦公軟體等。每個發行版都可能有不同的包管理系統、預設桌面環境、預裝軟體、使用者介面以及獨特的安裝和配置工具。常見的Linux發行版包括Ubuntu、Fedora、Debian、CentOS、Arch Linux、Red Hat Enterprise Linux等。
  3. 桌面環境(Desktop Environment, DE): 桌面環境是提供圖形使用者介面(GUI)的軟體集合,使得使用者可以透過圖形視窗和選單進行互動,而不是僅透過命令列。桌面環境通常包括視窗管理器、圖示、工具欄、檔案管理器、終端模擬器等元件。常見的桌面環境有GNOME、KDE Plasma、XFCE等。

Linux核心和發行版以及桌面環境的組合提供了所需的完整Linux桌面系統。使用者可以根據自己的需要選擇合適的發行版和桌面環境,以滿足個人偏好和特定用途。

這裡再順便提一下GNU和Linux的關係,可能大家經常會看到”GNU/Linux“這樣的詞彙。

GNU和Linux是兩個密切相關但各自獨立的概念,它們共同構成了現代Linux作業系統的基礎:

GNU: GNU是一個自由軟體作業系統專案,由Richard Stallman在1983年啟動,目的是建立一個完全由自由軟體組成的作業系統。"GNU"是"GNU's Not Unix"的遞迴縮寫,表明GNU雖然類似於Unix,但不包含任何Unix程式碼。GNU專案建立了許多用於作業系統的核心元件,如GNU Compiler Collection (GCC)、GNU C Library (glibc)和GNU Core Utilities (coreutils)。GNU專案也提倡自由軟體哲學,推動了GNU通用公共許可證(GPL)的編制和普及。

今天談論的Linux作業系統,通常指的是"GNU/Linux"系統,它是指使用Linux核心和GNU軟體及工具的作業系統。Linux提供了作業系統的核心,即核心,而GNU提供了構建完整作業系統所需的許多基本工具和庫。

但是大多數情況下,通常將整個作業系統簡稱為"Linux",但嚴格來講,當包括了大量GNU軟體的時候,它應該被稱為"GNU/Linux"。

那些年我折騰過的Linux桌面


上面給大家說了,在安裝Linux的時候我們需要考慮三個部分,Linux核心、發行版、桌面環境(DE)。但是發行版其實就是Linux核心+工具集,所以發行版是依賴Linux核心才能執行的。因此大多數時候你選擇了一個發行版裡面就包含了核心,就不需要再選擇Linux核心了(安裝完成後可以更換核心)。

而我第一款Linux桌面系統是Ubuntu+GNOME(DE 桌面環境)的組合。至於為什麼是Ubuntu+GNOME,因為在那時候我只接觸過Centos和Ubuntu。而我去網上搜尋Centos和Ubuntu的桌面版本時,大多數網站都是建議Ubuntu桌面,事實上也是如此。而Ubuntu桌面版預設的桌面環境(DE)就是GNOME。

這麼多年過去了,我陸續使用過很多Linux發行版和DE的不同組合。發行版使用過Manjaro、大蜥蜴、Debian、Deepin(非UOS)、Arch、CutfishOS等,桌面環境使用過GNOME、KDE、XFCE、DDE(國產Deepin DE)、I3等。目前(2024-03-11)使用的是Arch+KDE,在寫這篇文章的時候剛好KDE6釋出了,這幾天也折騰了一下KDE6,給大家看看效果:

使用Linux遇到的問題?


上面講了我是如何選擇Linux桌面的,接下來講講大家可能最關心的問題,那就是Linux桌面能不能像Windows和MacOS那樣正常辦公或者開發?

Linux桌面相比Windows和MacOS目前最大的問題就是生態,我記得我剛開始使用Linux桌面的時候國內很多軟體都沒有Linux版本,大多數情況下都是使用Wine等技術來相容使用Windows版本。目前情況改善了很多,目前主流的國產辦公軟體都有Linux版本了,比如我們常用的釘釘、飛書、騰訊會議等。QQ、微信也都出了Linux原生版本。

這裡不得不吐槽一下騰訊了,QQ是2023年開始推出全平臺重構版本的,在這之前的QQ Linux版本幾乎就不可用;而微信截至目前(2024-3-11)還只有一個原生Linux測試版本,而且還有白名單限制僅限UOS和麒麟系的Linux發行版使用。反觀人家WPS,Linux版本的WPS一直都沒有廣告,雖然前不久WPS也官宣Windows版本去掉廣告了,而且WPS Linux版本一直活躍更新,功能也不比Windows版本少。

而開發相關的軟體,作為Java後端常用的Idea、DataGrip、Navicat等都有Linux版本,其他的開發工具大多數也都有Linux版本,比如VsCode。這裡不得不說國外的軟體在全平臺支援上確實要比國內軟體好太多了。

這裡給大家列一下我常用的一些軟體:

功能 軟體名稱 官方地址
截圖 Flameshot https://flameshot.org/
郵件 Mailspring https://www.getmailspring.com/
檔案管理 Spacedrive https://github.com/spacedriveapp/spacedrive
文件處理 Wps https://www.wps.com/office/linux/
看圖 Gthumb https://github.com/GNOME/gthumb
SSH Xterminal https://xterminal.cn/
影片剪輯 Kdenlive https://kdenlive.org/zh/
字幕 Arctime https://arctime.org/
Java IDE IntelliJ IDEA https://www.jetbrains.com/idea/
DataBase IDE DataGrip https://www.jetbrains.com/datagrip/
Vpn V2raya https://v2raya.org/
輸入法 Rime + Fcitx5 https://rime.im/
文字編輯 Neovim https://neovim.io/
系統備份 Timeshift https://github.com/linuxmint/timeshift
介面測試 Insomnia https://insomnia.rest/
Redis客戶端 Redisinsight https://github.com/RedisInsight/RedisInsight
終端 Warp https://www.warp.dev/

Linux桌面的優缺點


在這裡總結一下我認為的Linux桌面的優點和缺點。

  • 優點:
    1. 開源免費,無論是Windows還是MacOS都是收費的,而Linux是開源免費的,開源專案總比閉源專案在安全性上更可靠。
    2. 發行版眾多,Linux有很多發行版,可以根據自己的喜好選擇不同的發行版,不會像Windows和MacOS那樣被一家公司或者組織束縛。
    3. 自由度高,Linux上面你可以隨便折騰,一個發行版可以換不同的桌面環境,不會像Windows和MacOS那樣只有一個桌面環境,而且桌面環境可以高度個性化。
    4. 穩定性好,Linux的穩定性比Widnows要好很多,這也是伺服器作業系統大多數都是Linux的原因之一。
    5. 技術支援好,這個跟發行版有很大的關係,比如我正在使用的Arch Linux,有非常完善的Wiki系統,而且有非常活躍的社群。當你在使用中出現問題,絕大多數情況下你都可以在Arch wiki上找到解決方案,極少數找不到解決方案的問題你也可以在Arch社群發帖提問,會有很多熱心的大佬給你提供建議和幫助。這點我想如果你不是Widnows企業使用者的話估計很難得到技術支援。
  • 缺點:
    1. 軟體生態差,目前Linux相比Windows和MacOS最大的問題就是軟體應用生態不足了,但是如果只是普通辦公和開發也完全足夠了。
    2. 對新手不友好,雖然Linux桌面環境已經在努力改善了,但是依然會出現很多和開發相關的名詞和知識,對於非計算機行業的朋友可能不太友好。
    3. 遊戲支援差,對於喜歡玩遊戲的朋友來說,Linux就不適合了,雖然Steam也有Linux版,但是裡面可玩的遊戲很少。

上面的優缺點我認為是對所有人都適用的,我作為Java後端使用Linux開發還有其他的優勢:

  1. 容器化技術原生支援,比如Docker,就是使用Linux名稱空間(namespaces)和資源隔離(CGroups)實現的。
  2. Linux上寫的Java程式碼直接部署在Linux伺服器上能避免一些作業系統差異引起的bug,雖然Java號稱跨平臺的,但是還是可能會因為一些作業系統上的差異導致的bug。比如Tomcat預設埠是80,如果你在Widnows上開發是能正常執行的,但是你將寫好的程式打包到Linux上以非root使用者是無法執行的,因為Linux上1024以下的埠是普通使用者無法使用的。
  3. 能學習更多的Linux知識,對於工作中需要使用Linux的人來說,這確實能提升技術能力。

以上就是我分享的為什麼使用Linux做開發的經驗,當然也不是勸大家使用Linux桌面,這個根據個人情況自己決定,本文只是純經驗分享。

本文使用 markdown.com.cn 排版

相關文章