Windows 上的开源软件入门

Windows 上的开源软件入门

西安邮电大学校内讲座的分享大纲

这是我于2024年9月21日在第21届国际软件自由日西邮站上的分享,主要面向大学新生

手机用户可以通过右下角的 按钮展开目录。

从程序讲起

在开发者的世界中,软件分为命令行程序和图形界面程序,并且前者的使用频率非常高。

命令行程序(CLI)

命令即程序

你也许在 Windows 上使用过 ping 命令检测网络连通性。

示例:ping 命令的输出
log
PS> ping baidu.com

正在 Ping baidu.com [110.242.68.66] 具有 32 字节的数据:
来自 110.242.68.66 的回复: 字节=32 时间=27ms TTL=48
来自 110.242.68.66 的回复: 字节=32 时间=28ms TTL=48
来自 110.242.68.66 的回复: 字节=32 时间=26ms TTL=48
来自 110.242.68.66 的回复: 字节=32 时间=29ms TTL=48

110.242.68.66 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 26ms,最长 = 29ms,平均 = 27ms

实际上 ping 是一个程序,位于 C:\Windows\System32\PING.EXE,你可以通过 Get-Command ping 查看到它的路径。

系统如何找到这条命令对应的程序?

环境变量 PATH

在命令行输入 ping 命令,系统会去 PATH 环境变量中寻找可执行文件,并执行。

示例:打印 PATH 环境变量
log
PS> $env:PATH.Split(';') | % { echo $_ }
C:\WINDOWS\system32
C:\WINDOWS
C:\WINDOWS\System32\Wbem
C:\WINDOWS\System32\WindowsPowerShell\v1.0\
C:\WINDOWS\System32\OpenSSH\
……

同时,环境变量 PATHEXT 规定了执行命令时可省略的后缀(其中包含 .EXE),Windows 又对大小写不敏感,因此我们可以通过 ping 直接访问 C:\Windows\System32\PING.EXE

编写自己的命令行程序

有些同学想要使用 VS Code 编写 C 语言程序,这时就需要把下载到的 x86_64-14.2.0-release-win32-seh-ucrt-rt_v12-rev0.7z 解压后的 bin 目录加入到 PATH 中。这个目录中含有 gcc.exe,VS Code 识别到后就可以调用 gcc 编译 C 程序。

清楚了 ping 的由来,其后的参数 baidu.com 呢?

命令行程序的参数是命令行参数,通过 main() 函数获取。

示例:编写参数读取程序
print_argv.cc
#include <stdio.h>
int main(int argc, char *argv[]) {
    printf("argc = %d\n", argc);
    for (int i = 0; i < argc; i++) {
        printf("argv[%d] = %s\n", i, argv[i]);
    }
    return 0;
}
程序输出log
PS> gcc -o print_argv.exe print_argv.c
PS> ./print_argv.exe arg1 arg2
argc = 3
argv[0] = C:\Users\Zhilu\test\print_argv.exe
argv[1] = arg1
argv[2] = arg2

这样,我们就实现了命令参数的读取。

其他种类的命令行程序

除了最基础的命令行程序之外,还有一部分交互式命令行程序使用了 TUI,它在基本的命令行中实现了图形化交互,一个众所周知的例子是经典的 Windows 的启动管理器

ansi
                 Windows 启动管理器                 

选择要启动的操作系统,或按 Tab 选择工具:
(使用箭头键突出显示你的选择,然后按 Enter)

     Windows 10                                   
     Windows 7

若要为此选择指定高级选项,请按 F8。

工具:

     Windows 内存诊断

 Enter=选择          Tab=菜单              Esc=取消 

Vim、nano、top 也是经典的 TUI 程序,相比于命令行程序,它具有更好的交互体验。当然,随着计算机技术的进步,图形化用户界面(GUI)开始流行。

图形界面程序(GUI)

顾名思义,图形界面程序就是具有图形界面的程序。大家常用的桌面软件,如 Chrome、VS Code、QQ,都是图形界面程序。

你知道吗

Windows 终端、命令行(CMD)也是图形界面程序。(参见 Windows 控制台和终端定义

图形界面程序也依赖环境变量和命令行参数

你也许会想,命令行程序看起来有很多条条框框,图形界面程序能否摆脱这些“麻烦”?

可惜,答案是“不能”。

比如方才提到的 VS Code 编写 C 语言程序,需要配置环境变量

再比如有一种很低级又不易被察觉的浏览器主页劫持方式:修改快捷方式参数。它的表现是通过桌面图标打开的浏览器会直接访问某个链接,而通过任务栏和开始菜单打开的浏览器不会。

只需要右键桌面上的浏览器图标,选择“属性”,在“目标”的末尾添加 https://baidu.com,再保存。现在双击桌面图标,就会直接访问百度了。

“认识 GUI 的方式、重要性、价值”

我在网上看到不少调侃,说一部分书籍教程具有非常良好的“防自学”特性——没有人带领教学,似乎就变得难以理解了。在计算机领域,你无需这份担忧。许多内容是开放、自由的,而不是所谓的“防自学”教程。

有一幅图给我留下了十分深刻的印象:Owura Kwadwo 是非洲的一名教师,他在黑板上画出软件界面,给学生讲授计算机科学课程。

Owura Kwadwo 在黑板上画出 Microsoft Word 界面
Owura Kwadwo 在黑板上画出 Microsoft Word 界面

引用此例是为了说明,学习操作计算机,关键的一点就是认识图形界面。如果不熟悉,就如同不熟悉智能手机的人面对满屏幕的图标和入口不知所措那般,操作程序必然遇到困难。

你缺失的那门计算机课 (电子书)

推荐这本电子书,对于初次接触计算机的人来说,这是一本好且实用的入门书籍。从拆开包装到软件使用,从文件管理到系统修理,你都能在其中找到答案。特别地,这是一本开源书籍,也使用了开放的 CC BY-NC-SA 4.0 创作许可协议。

软件分类

自由软件和专有软件

“自由软件”尊重用户的自由,并且尊重整个社区。粗略来讲,一个软件如果是自由软件,这意味着用户可以自由地运行,拷贝,分发,学习,修改并改进该软件。因此,“自由软件”是关乎自由的问题,与价格无关。

——什么是自由软件? - GNU 工程

专有软件,也叫做非自由软件,意味着软件不尊重用户的自由和社区。专有软件将其开发者或所有者置于对用户的支配地位。这种权力本身就不公正。

专有软件开始的不公正通常会导致进一步的不公正——恶意功能。

——专有软件 - GNU 工程

对于自由软件的哲学争辩比较激烈,此处仅引作定义。

由商业公司开发的软件,通常是专有软件。这些软件通常具有一些不受欢迎的功能,如广告、跟踪用户、收集数据等。例如,某款两字母聊天软件被多名开发者指出会扫描电脑硬盘(尤其是浏览器历史记录),被火绒实锤;某款三字购物软件也被安全机构指出利用安卓漏洞控制手机系统,达到“莫名安装、泄漏隐私、无法卸载”的目的。这些事情在开发界并不稀奇。

开源软件

开源软件是通过开放协作开发和维护的软件,通常免费提供,可供任何人使用、检查、修改和重新分发。 这与专有或闭源软件应用程序(如 Microsoft Word、Adobe Illustrator)形成对比,这些应用程序由创建者或版权所有者出售给最终用户,除非版权所有者说明,否则不能对其进行编辑、增强或重新分发。

“开源”一词还泛指一种基于社区的方法,通过开放协作、包容性、透明度和频繁的公开更新来创建任何知识产权(如软件)。

——什么是开源软件?| IBM

开源软件就是大家一起开发、共享代码的程序。简单说,就是软件的代码公开,任何人都能免费使用、修改和分发。很多常用的工具,比如 Linux、Firefox、VS Code,都是开源的。开源软件不仅免费(可能有收费的技术支持),还能学到很多编程知识,甚至有机会参与大型项目,积累经验。

世界各地的开发者一同维护一个项目,实时地添加功能、修复 bug,你也能参与其中。这样真的很酷!

常见的开源协议

开源不是乱开,而是讲武德地开,有章法地开。这是几个常见的开源协议:

  • MIT:非常宽松,只要保留原作者的版权声明,就可以随意使用、修改和分发。
  • GPL(通用公共许可证):要求修改后的软件也必须开源,并且使用同样的GPL协议。这种协议注重软件的自由分享。
  • Apache 2.0:允许自由使用、修改和分发,并且提供专利权保护。但必须保留原作者的版权和声明。

西邮 Linux 兴趣小组拥抱开源

西邮 Linux 兴趣小组( https://xiyoulinux.com )秉承自由、开放、共享(Free Open Share)的理念,热爱开源事业并参与多个开源项目。

  • 组织举办了多届软件自由日活动
  • 向多个开源项目贡献代码,如 Linux、Apache、CNCF
  • 积极参与 Google Summer of Code、 开源之夏)等开源活动
  • 小组 GitHub 组织也有多个开源项目,培养计划完全开源

在 Windows 上使用开源软件

在你探索开源世界之前,你已经在使用众多开源软件了。

访问代码托管平台

全世界最大的代码托管平台的称号当属于 GitHub。它 UGC 的特性一方面促进了各类项目的百花齐放,另一方面又使得我们访问这个平台会遇到一些困难——不过不用担心,还是有相对 Free 的方法来访问这个平台。

瓦特工具箱 / Watt Tookit(Steam++)

Watt Toolkit 是由江苏蒸汽凡星科技有限公司开发与维护的 (GNU) 自由开源软件,采用 GPL v3 开源协议同时发布于 Github 及 Gitee。

它是一款免费的游戏加速工具,也能用于访问 GitHub,可以在 Microsoft Store 中下载。

GitHub 增强 - 高速下载

高速下载 Git Clone/SSH、Release、Raw、Code(ZIP) 等文件 (公益加速)、项目列表单文件快捷下载、添加 git clone 命令。

项目开源于 XIU2/UserScript,采用 GPL v3 协议。使用前需要在浏览器安装 “篡改猴” 插件。

使用其下载软件

参阅官方文档:在 GitHub 上寻找灵感

当访问一个项目的代码仓库时,首先阅读文件目录列表下方的 README,它有助于你快速了解项目。当项目具有 二进制发行版 时,可以在文件目录列表右侧的 Releases 中下载。

如何选择适合自己系统的发行版?

  • 确定操作系统,如 Windows、Linux、MacOS(darwin)。
  • 确定 CPU 架构,如 x86_64、arm64。
  • 新手优先选择可执行文件,如 .exe.msi.dmg
    • 若没有则选择编译后的打包。
    • 一般没有根据 Source code 编译的能力。

安装了刚刚的 GitHub 增强插件后,你应当能在下载时看到多个地区的镜像按钮。你可以用鼠标中键点击这些链接,保留一个速度快的下载任务。

这些开源软件的作者一般没有购买微软的数字签名证书,因此下载时会提醒“通常不会下载……请在打开前确保信任……”的警告。这时你需要点击 - 保留 - 显示详细信息▼ - 仍然保留

HelloGitHub

HelloGitHub 是一个发现和分享有趣、入门级开源项目的平台。希望大家能够在这里找到编程的快乐、 轻松搞定问题的技术方案、大呼过瘾的开源神器,顺其自然地开启开源之旅。

它能帮助你探索 GitHub。项目开源于 521xueweihan/HelloGithub,采用 CC BY-NC-ND 4.0 协议。也有同名微信公众号可供关注。

HelloGithub

使用包管理器安装软件

WinGet

WinGet 是微软官方的 Windows 程序包管理器,它提供了命令行程序,允许你安装、更新和卸载 Windows 上的应用程序。以 MIT 协议开源在 microsoft/winget-cli

WinGet 官方演示
WinGet 官方演示
演示:使用 WinGet

你也许会羡慕 Linux 用户的终端具有炫酷的界面和方便的功能,但 Windows 也能做到这些。

Oh My Posh 是一个用于 Windows 终端的命令行主题管理工具。根据 MIT 协议开源在 JanDeDobbeleer/oh-my-posh

Oh My Posh
Oh My Posh
Windows 终端体验优化指南

Scoop

Scoop 是一个 Windows 的命令行包管理器。由于少数通过 WinGet 安装的 CLI 有相对目录访问问题,我一般使用 Scoop 来安装命令行程序。

场内活动

在这一环节,我会演示通过 Scoop 安装的 CLI。

演示:使用 Scoop

这些 CLI 几乎都是 Linux 下常见的命令行程序,我通过 Scoop 安装了 Windows 版本。

推荐一些开源软件

虚拟机:Oracle VM VirtualBox

在搜索引擎输入“VMware”,跳出的联想词就有“激活密钥”相关字样。与其用破解版,为何不试试免费开源的 VirtualBox?

如果你对虚拟机没有特殊要求,VitualBox 是最适合新手的选择之一。

性能监控:Traffic Monitor

Traffic Monitor是一款用于Windows平台的网速监控悬浮窗软件,可以显示当前网速、CPU及内存利用率,支持嵌入到任务栏显示,支持更换皮肤、历史流量统计等功能。

项目采用“反996协议”开源。这个开源协议很有趣,它允许免费使用、复制、修改和分发授权作品,前提是需保留版权声明和许可证,并遵守相关劳动法律,且不得剥夺员工的相关权利。

Traffic Monitor 悬浮窗
Traffic Monitor 悬浮窗

你可以干掉 Windows 左下角的小组件广告,以 Traffic Monitor 代之。

  • 右键开始菜单图标,选择“终端”。(“PowerShell”也行,但说明该升系统了)
  • 输入命令卸载“Windows Web 体验包”(小组件广告) PS>
    winget uninstall "windows web experience pack"
  • 右键 Traffic Monitor,勾选“显示任务栏窗口”,取消勾选“显示主窗口”
  • 你可以在“选项”-“任务栏窗口设置”里继续调整

屏幕录制:OBS Studio

你也许试着寻找过免费无广告的录屏软件。

OBS Studio 是一款免费、开源、跨平台的屏幕、视频录制及直播串流软件。采用 GPL v2 开源协议。

当然,Windows 11 自带的截图工具升级后已经支持录屏,QQ、腾讯会议、NVIDIA GeForce Experience(现已升级为NVIDIA App)也有录屏功能。

文件传输:LocalSend

还在用QQ、微信在自己的设备间传输大文件、大量文件吗?

LocalSend 是一款免费、开源、跨平台的文件传输软件。采用 Apache v2.0 开源协议。

安卓控制:scrcpy

这是一款通过 ADB 远程操作安卓设备的命令行工具。有 Electron 实现的图形化版本 Escrcpy

Escrcpy 截图
Escrcpy 截图

串流好搭档:Sunshine 和 Moonlight

超低延迟操作电脑,还支持原生手柄连接。

Sunshine 是一款自托管的游戏流媒体服务器,适用于 Moonlight。它提供了低延迟的云游戏服务器功能,支持 AMD、Intel 和 Nvidia GPU 硬件编码。同时也支持软件编码。你可以通过任何 Moonlight 客户端在多种设备上连接 Sunshine。Sunshine 提供了一个 Web UI,方便你在喜欢的浏览器中进行配置和客户端配对,支持本地服务器或移动设备进行配对。

Moonlight 串流指南

入门,但不止于 Windows!

镜像站

什么是镜像站

“镜像”指的是对原始网站或软件仓库的一个完全复制版本。“换源”是指将镜像站作为软件源,通过镜像站下载软件。

为了加快下载速度、提升下载成功率,许多高校建立了镜像站,用以提供开源软件镜像、Linux 镜像源、PyPl 镜像等。淘宝、腾讯云、阿里云也提供了 npm 镜像、pip 镜像等服务。

校园网联合镜像站

MirrorZ 提供校园网镜像站的索引和跳转服务,由教育网提供支持,能够基于地理位置快速访问各镜像站点资源。项目以 MIT 协议开源于 mirrorz-org/mirrorz

MirrorZ - 校园网联合镜像站

Android

F-Droid

F-Droid 是一个开源的 Android 应用商店,它提供了大量自由(免费)和开源的应用。

F-Droid - 自由开源的安卓应用商店

Termux

Termux 是一个适用于 Android 的终端模拟器,其环境类似于 Linux 环境。无需 Root 或设置即可使用。Termux 会自动进行最小安装 - 使用 APT 包管理器即可获得其他软件包。

Termux 是一个 Android 终端应用程序和 Linux 环境。通过 GPL v3 协议开源在 termux/termux-app 上。你可以在上面使用 Linux 风格的命令并管理开放环境。

Termux 简单指南
场内活动

在这一环节,我会通过 SSH 演示安卓平板上的 Termux 使用。

安装软件

在 Windows 上卸载流氓软件,不仅检验一个人的电脑素养,还尤其考察他的语文功底。

在国产手机上安装“未知来源的软件”也是如此。

如果你在安装手机软件时遇到困难,一般自行上网搜索就能解决问题。

网站

以下网站都是完全开源的,你可以在 GitHub 上找到它们。

CO 导航

CO 导航是由我开发的网站,为西安邮电大学学生提供网址导航服务,于2023年2月7日开始运营,是“更适合西邮宝宝体质的网址导航”。

CO 导航 - 西邮导航服务

西邮 Wiki

西安邮电大学非官方校园生活指南,于2024年6月30日 g0ubu1i 带领立项,持续更新中。智邮普创、西邮 Linux 兴趣小组、隔壁小O、计科卓越等组织团体的多名成员以个人名义参与编写。

西邮 Wiki - 非官方校园生活指南

CS 自学指南

CS 自学指南由北大信科 @PKUFlyingPig 编写,旨在帮助初学者通过优质开源资源在 2-3 年内全面掌握计算机科学核心知识和技能,涵盖多种编程语言及多个重要领域,提升科研和就业竞争力。

CS 自学指南

Linux 101

Linux 101 是一份由 USTC LUG(中国科学技术大学 Linux 用户组)编写的 Linux 的基础教程,目标是引导不了解 Linux 的读者掌握基础且实用的知识并领略社区开源文化的魅力。

Linux 101

Linux 和开源的大门永远向你敞开。

配置并差点运行不了 Java Applet

博客进化:从 Hexo 到 Nuxt Content

评论区

评论加载中...