我为什么使用Linux做开发
系统选择
目前市面上主流的桌面操作系统在大多数人眼里只有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的组成部分可以分为以下三个主要部分:
「Linux内核(Kernel)」: Linux内核是操作系统的核心,负责管理硬件资源,提供系统服务,以及允许软件应用进行控制硬件的基础。它是一个由Linus Torvalds在1991年首次发布的开源软件项目,至今仍在不断的发展和更新中。GitHub - torvalds/linux: Linux kernel source tree。 「Linux发行版(Distributions)」: Linux发行版是基于Linux内核的操作系统,包括了内核以及一套完整的软件和应用程序,如GNU工具集、桌面环境、办公软件等。每个发行版都可能有不同的包管理系统、默认桌面环境、预装软件、用户界面以及独特的安装和配置工具。常见的Linux发行版包括Ubuntu、Fedora、Debian、CentOS、Arch Linux、Red Hat Enterprise Linux等。 「桌面环境(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桌面的优点和缺点。
优点: 开源免费,无论是Windows还是MacOS都是收费的,而Linux是开源免费的,开源项目总比闭源项目在安全性上更可靠。 发行版众多,Linux有很多发行版,可以根据自己的喜好选择不同的发行版,不会像Windows和MacOS那样被一家公司或者组织束缚。 自由度高,Linux上面你可以随便折腾,一个发行版可以换不同的桌面环境,不会像Windows和MacOS那样只有一个桌面环境,而且桌面环境可以高度个性化。 稳定性好,Linux的稳定性比Widnows要好很多,这也是服务器操作系统大多数都是Linux的原因之一。 技术支持好,这个跟发行版有很大的关系,比如我正在使用的Arch Linux,有非常完善的Wiki系统,而且有非常活跃的社区。当你在使用中出现问题,绝大多数情况下你都可以在Arch wiki上找到解决方案,极少数找不到解决方案的问题你也可以在Arch社区发帖提问,会有很多热心的大佬给你提供建议和帮助。这点我想如果你不是Widnows企业用户的话估计很难得到技术支持。
缺点: 软件生态差,目前Linux相比Windows和MacOS最大的问题就是软件应用生态不足了,但是如果只是普通办公和开发也完全足够了。 对新手不友好,虽然Linux桌面环境已经在努力改善了,但是依然会出现很多和开发相关的名词和知识,对于非计算机行业的朋友可能不太友好。 游戏支持差,对于喜欢玩游戏的朋友来说,Linux就不适合了,虽然Steam也有Linux版,但是里面可玩的游戏很少。
上面的优缺点我认为是对所有人都适用的,我作为Java后端使用Linux开发还有其他的优势:
容器化技术原生支持,比如Docker,就是使用Linux命名空间(namespaces)和资源隔离(CGroups)实现的。 Linux上写的Java代码直接部署在Linux服务器上能避免一些操作系统差异引起的bug,虽然Java号称跨平台的,但是还是可能会因为一些操作系统上的差异导致的bug。比如Tomcat默认端口是80,如果你在Widnows上开发是能正常运行的,但是你将写好的程序打包到Linux上以非root用户是无法运行的,因为Linux上1024以下的端口是普通用户无法使用的。 能学习更多的Linux知识,对于工作中需要使用Linux的人来说,这确实能提升技术能力。
以上就是我分享的为什么使用Linux做开发的经验,当然也不是劝大家使用Linux桌面,这个根据个人情况自己决定,本文只是纯经验分享。
本文使用 markdown.com.cn 排版