我为什么使用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 排版
我为什么使用Linux做开发的更多相关文章
- s3c6410 Linux 驱动开发环境搭建
s3c6410 Linux 驱动开发环境搭建 -- 既然你是做Linux开发的,你还用虚拟机? 非常多人都在win下做开发,于是SD_writer.exe之类的烧写工具"大行其道" ...
- 转行做开发的Wiki:找好方向
案 我是一个从建筑行业转行过来的后端工程师,转行来写代码了.最近发现经常有同学和网上的朋友问我一些转行的问题,零零散散地回答莫不如写一篇文章,以后回答此类问题就方便多了. 我的专业是给排水,属于非常传 ...
- 如何参与Linux内核开发(转)
本文来源于linux内核代码的Document文件夹下的Hoto文件.Chinese translated version of Documentation/HOWTO If you have any ...
- 嵌入式Linux驱动开发日记
嵌入式Linux驱动开发日记 主机硬件环境 开发机:虚拟机Ubuntu12.04 内存: 1G 硬盘:80GB 目标板硬件环境 CPU: SP5V210 (开发板:QT210) SDRAM: 512M ...
- 嵌入式linux应用开发完全手册学习笔记一
2015.3.25星期三 晴 有两个星期没写学习日记了,找个时间把这段时间做的电子词典和ARM小项目总结一下. 下面的知识点总结,U-BOOT:参考PDF文档:嵌入式linux应用开发完全手册 当虚拟 ...
- 专访Linux嵌入式开发韦东山操作系统图书作者--转
CSDN学院讲师韦东山:悦己之作,方能悦人 发表于2015-04-28 08:09| 6669次阅读| 来源CSDN| 24 条评论| 作者夏梦竹 专访Linux嵌入式开发韦东山操作系统图书作者 摘要 ...
- 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)
这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...
- 嵌入式系统Linux内核开发工程师必须掌握的三十道题(转)
嵌入式系统Linux内核开发工程师必须掌握的三十道题 如果你能正确回答以下问题并理解相关知识点原理,那么你就可以算得上是基本合格的Linux内核开发工程师,试试看! 1) Linux中主要有哪几种内核 ...
- 在windows下使用linux的开发环境
windows下做开发确实有些不方便,比如python.ruby什么的都要自己装,不过这还是小事情.有一次想安装node-sass,windows下报错缺少MSBuild什么的,可能需要装一个vs解决 ...
- 如何参与linux 内核开发
如果想评论或更新本文的内容,请直接联系原文档的维护者.如果你使用英文 交流有困难的话,也可以向中文版维护者求助.如果本翻译更新不及时或者翻 译存在问题,请联系中文版维护者. 英文版维护者: Gre ...
随机推荐
- 使用protobuf生成代码import包找不到
protobuf使用import导入包找不到 前言 解决方案 protobuf使用import导入包找不到 前言 使用protobuf生成go代码,发现protobuf中一个import引用找不到 p ...
- 手写 Spring,写到简历上被怼?
作者:小傅哥 博客:https://bugstack.cn 图书:https://u.jd.com/4LapTH4 沉淀.分享.成长,让自己和他人都能有所收获! 一直都有一个非常好的硬核项目在你我身边 ...
- LeetCode刷题日记 2020/03/26
题干 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc ...
- 月薪40K+的测试老兵,测试开发学习实战心得分享
1. 前言 大家好,我是Arthur,拥有超过10年以上的银行测试经验,目前在一家互联网创业公司担任测试经理.在我们那个年代,基本上都是不会写代码的做测试工作,而且基本都是纯手工:最近几年,测试开发开 ...
- (Python)每日代码||2024.1.18
m = 10 a = 10 print(id(m)) print(id(a)) '''输出 140713874176728 140713874176728 ''' print() a = 1 b = ...
- React axios 使用 http-proxy-middleware 解决跨域问题小记
壹 ❀ 引 在上篇bug分析的记录文中,提到axios可做到取消接口请求,所以想写一篇关于axios.CancelToken使用以及原理分析的文章(主要是自己好奇到底如何做到的取消).在准备工作阶段, ...
- 延时队列 DelayQueue
当用户超时未支付时,给用户发提醒消息.另一种场景是,超时未付款,订单自动取消.通常,订单创建的时候可以向延迟队列种插入一条消息,到时间自动执行.其实,也可以用临时表,把这些未支付的订单放到一个临时表中 ...
- Laravel入坑指南(4)——数据库(Mysql)
来来来,新的一节出炉了.这一节大家一起了解,Laravel如何对Mysql进行CURD. 我们回顾一下,PHP操作Mysql无非就是通过五个要素:host(地址).username(用户名).pass ...
- 两台redhat7虚拟机配置ssh免密访问
说明 有时候为了方便搭建各种集群环境,需要配置多台虚拟机之间可以互相免密码访问.本文就介绍一下这个知识点,希望所帮助的朋友给老徐点个赞:) 两台虚拟机环境配置如下: 虚拟机1:192.168.56.1 ...
- 我在winform项目里使用“Windows I/O完成端口”的经验分享
少年!看你骨骼惊奇,是万中无一的练武奇才,我这儿有本武林秘籍,见与你有缘就送你了! 如来神掌 Windows I/O完成端口是一个我至今都说不好的话题,请宽容的接受我这不是科班出身的自学成才的野生程序 ...