<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="https://b1n.io/feed_style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans">
    <tabi:metadata xmlns:tabi="https://github.com/welpo/tabi">
        <tabi:base_url>https://b1n.io</tabi:base_url>
        <tabi:separator>
            •
        </tabi:separator>
        <tabi:about_feeds>
            这是Web Feed，又称为Atom Feed，把现在的网址复制到新闻阅读器即可订阅本站文章。造访「About Feeds」来了解更多资讯。
        </tabi:about_feeds>
        <tabi:visit_the_site>
            造访网站
        </tabi:visit_the_site>
        <tabi:recent_posts>
            近期文章
        </tabi:recent_posts>
        <tabi:last_updated_on>
            更新于 $DATE
        </tabi:last_updated_on>
        <tabi:default_theme>dark</tabi:default_theme>
        <tabi:post_listing_date>date</tabi:post_listing_date>
        <tabi:current_section>~/b1n</tabi:current_section>
    </tabi:metadata><link rel="extra-stylesheet" href="https://b1n.io/skins/mint.css?h=504215cf6bc10586b487" /><title>~/b1n</title>
        <subtitle>Linux内核漏洞研究员</subtitle>
    <link href="https://b1n.io/zh-Hans/atom.xml" rel="self" type="application/atom+xml"/>
    <link href="https://b1n.io/zh-Hans" rel="alternate" type="text/html"/>
    <generator uri="https://www.getzola.org/">Zola</generator><updated>2026-10-14T00:00:00+00:00</updated><id>https://b1n.io/zh-Hans/atom.xml</id><entry xml:lang="zh-Hans">
        <title>Linux Kernel Development and Debugging on macOS</title>
        <published>2025-06-02T00:00:00+00:00</published>
        <updated>2025-06-03T00:00:00+00:00</updated>
        <author>
            <name>b1n</name>
        </author>
        <link rel="alternate" href="https://b1n.io/zh-Hans/blog/linux-kernel-development-and-debugging-on-macos/" type="text/html"/>
        <id>https://b1n.io/zh-Hans/blog/linux-kernel-development-and-debugging-on-macos/</id>
        
            <content type="html">&lt;p&gt;我使用搭载&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://en.wikipedia.org/wiki/Apple_silicon&quot;&gt;Apple silicon&lt;/a&gt;的MacBook Pro, 通过Linux虚拟机跨平台编译x86_64内核, 开发和调试都在macOS中原生进行. Linux Kernel VRED (Vulnerability Research and Exploit Development)通常不修改内核代码, 不需要频繁编译.&lt;/p&gt;
&lt;h2 id=&quot;create-disk-image&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#create-disk-image&quot; aria-label=&quot;Anchor link for: create-disk-image&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Create Disk Image&lt;/h2&gt;
&lt;p&gt;Linux内核开发需要大小写敏感的文件系统. macOS文件系统默认大小写不敏感, 查看&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://support.apple.com/guide/disk-utility/create-a-disk-image-dskutl11888/22.6/mac/15.0&quot;&gt;Create a blank disk image for storage&lt;/a&gt;, 创建一个大小写敏感的空白磁盘映像.&lt;/p&gt;
&lt;p&gt;挂载创建的磁盘映像, 克隆Linux Kernel仓库. 默认挂载到&lt;code&gt;/Volumes&lt;/code&gt;下.&lt;/p&gt;
&lt;h2 id=&quot;create-linux-vm&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#create-linux-vm&quot; aria-label=&quot;Anchor link for: create-linux-vm&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Create Linux VM&lt;/h2&gt;
&lt;p&gt;我使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.parallels.com&quot;&gt;Parallels Desktop&lt;/a&gt;虚拟机管理程序创建&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.debian.org&quot;&gt;Debian&lt;/a&gt;虚拟机, 也可以使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://mac.getutm.app&quot;&gt;UTM&lt;/a&gt;, 开源免费.&lt;/p&gt;
&lt;p&gt;安装Debian软件包:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-25&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-20&quot;&gt; apt update&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-25&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-20&quot;&gt; apt install build-essential crossbuild-essential-amd64 bc bison flex libncurses-dev libelf-dev libssl-dev&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-25&quot;&gt;sudo&lt;/span&gt;&lt;span class=&quot;z-20&quot;&gt; apt install debootstrap qemu-user-static&lt;/span&gt;&lt;span class=&quot;z-5 z-i&quot;&gt; # syzkaller create-image.sh required&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;共享大小写敏感的磁盘到虚拟机. 虚拟机需要安装Parallels Tools, 否则不会自动挂载共享的磁盘. 默认自动挂载到&lt;code&gt;/media/psf&lt;/code&gt;下.&lt;/p&gt;
&lt;h2 id=&quot;compile&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#compile&quot; aria-label=&quot;Anchor link for: compile&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Compile&lt;/h2&gt;
&lt;p&gt;设置一些跨平台编译所需的环境变量:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-19 z-i&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;z-25&quot;&gt; ARCH&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-25&quot;&gt;x86_64&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-19 z-i&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;z-25&quot;&gt; CROSS_COMPILE&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-25&quot;&gt;x86_64-linux-gnu-&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-19 z-i&quot;&gt;export&lt;/span&gt;&lt;span class=&quot;z-25&quot;&gt; CC&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-25&quot;&gt;x86_64-linux-gnu-gcc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;生成默认的内核配置文件: &lt;code&gt;make defconfig&lt;/code&gt;, 编辑&lt;code&gt;.config&lt;/code&gt;文件启用下面的内核配置选项:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Debug info for symbolization.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CONFIG_DEBUG_INFO_DWARF4=y&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Required for Debian Stretch and later&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CONFIG_CONFIGFS_FS=y&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CONFIG_SECURITYFS=y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更新内核配置文件: &lt;code&gt;make olddefconfig&lt;/code&gt;, 编译内核: &lt;code&gt;make -j`nproc`&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;code-navigation&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#code-navigation&quot; aria-label=&quot;Anchor link for: code-navigation&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Code Navigation&lt;/h2&gt;
&lt;p&gt;我使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://ctags.io&quot;&gt;Ctags&lt;/a&gt;和&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://cscope.sourceforge.net&quot;&gt;Cscope&lt;/a&gt;导航内核代码, 速度极快. Neovim需要安装第三方Cscope插件, 推荐使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/dhananjaylatkar/cscope_maps.nvim&quot;&gt;cscope_maps.nvim&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Linux内核项目的Makefile中有&lt;code&gt;tags&lt;/code&gt;和&lt;code&gt;cscope&lt;/code&gt;目标, 生成各自依赖的索引文件. 仅对已编译的源文件生成索引文件, 可通过设置&lt;code&gt;COMPILED_SOURCE&lt;/code&gt;环境变量实现.&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot; data-name=&quot;https://elixir.bootlin.com/linux/v6.15/source/scripts/tags.sh#L109&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-13&quot;&gt;all_target_sources&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-18&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-24&quot;&gt;	if&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; [&lt;/span&gt;&lt;span class=&quot;z-24&quot;&gt; -n&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-25&quot;&gt;$COMPILED_SOURCE&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;&amp;quot; ];&lt;/span&gt;&lt;span class=&quot;z-24&quot;&gt; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-25&quot;&gt;		all_compiled_sources&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-24&quot;&gt;	else&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-25&quot;&gt;		all_sources&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-24&quot;&gt;	fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-18&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;debugging&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#debugging&quot; aria-label=&quot;Anchor link for: debugging&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Debugging&lt;/h2&gt;
&lt;p&gt;查看&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/google/syzkaller/blob/master/docs/linux/setup_ubuntu-host_qemu-vm_x86-64-kernel.md#image&quot;&gt;syzkaller&lt;/a&gt;的教程, 创建Debian Linux映像, 复制到共享磁盘.&lt;/p&gt;
&lt;p&gt;使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.qemu.org&quot;&gt;QEMU&lt;/a&gt;运行Linux内核:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-25&quot;&gt;qemu-system-x86_64&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-29&quot;&gt;	-m&lt;/span&gt;&lt;span class=&quot;z-20&quot;&gt; 2G&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-29&quot;&gt;	-smp&lt;/span&gt;&lt;span class=&quot;z-33&quot;&gt; 2&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-29&quot;&gt;	-kernel&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-20&quot;&gt;bzImag&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;&amp;gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-29&quot;&gt;	-append&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-20&quot;&gt;console=ttyS0 root=/dev/sda net.ifnames=0&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;&amp;quot; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-29&quot;&gt;	-drive&lt;/span&gt;&lt;span class=&quot;z-20&quot;&gt; file=&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-20&quot;&gt;stretch.im&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-20&quot;&gt;,format=raw&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-29&quot;&gt;	-net&lt;/span&gt;&lt;span class=&quot;z-20&quot;&gt; user,host=10.0.2.31,hostfwd=tcp:127.0.0.1:2222-:22&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-29&quot;&gt;	-net&lt;/span&gt;&lt;span class=&quot;z-20&quot;&gt; nic,model=e1000&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-29&quot;&gt;	-nographic&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-29&quot;&gt;	-no-reboot&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-29&quot;&gt;	-pidfile&lt;/span&gt;&lt;span class=&quot;z-20&quot;&gt; vm.pid&lt;/span&gt;&lt;span class=&quot;z-29&quot;&gt; -s&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;参数说明查看&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.qemu.org/docs/master/system/index.html&quot;&gt;System Emulation&lt;/a&gt;官方文档.&lt;/p&gt;
&lt;p&gt;使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.sourceware.org/gdb&quot;&gt;gdb&lt;/a&gt; + &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://pwndbg.re&quot;&gt;pwndbg&lt;/a&gt;调试内核, 推荐使用Nix安装pwndbg: &lt;code&gt;nix profile install github:pwndbg/pwndbg&lt;/code&gt;.&lt;/p&gt;
</content>
        <summary type="html">macOS搭建Linux Kernel开发调试环境.</summary>
        </entry><entry xml:lang="zh-Hans">
        <title>First Patch to Linux Kernel</title>
        <published>2025-05-30T00:00:00+00:00</published>
        <updated>2026-10-14T00:00:00+00:00</updated>
        <author>
            <name>b1n</name>
        </author>
        <link rel="alternate" href="https://b1n.io/zh-Hans/blog/first-patch-to-linux-kernel/" type="text/html"/>
        <id>https://b1n.io/zh-Hans/blog/first-patch-to-linux-kernel/</id>
        
            <content type="html">&lt;p&gt;Linux Kernel是地球最大的开源项目之一, 使用电子邮件工作流接受贡献.&lt;/p&gt;
&lt;p&gt;推荐阅读&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://kernelnewbies.org/Outreachyfirstpatch&quot;&gt;Outreachyfirstpatch&lt;/a&gt;, 指导创建第一个Linux Kernel补丁. 官方文档查看&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://docs.kernel.org/process/submitting-patches.html&quot;&gt;Submitting patches&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;kernel-tree&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#kernel-tree&quot; aria-label=&quot;Anchor link for: kernel-tree&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Kernel Tree&lt;/h2&gt;
&lt;p&gt;&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://git.kernel.org&quot;&gt;Linux Kernel&lt;/a&gt;项目有许多代码仓库, 称之为树. 不同的子系统或功能在不同的子树中开发, 最终由&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://en.wikipedia.org/wiki/Linus_Torvalds&quot;&gt;Linus Torvalds&lt;/a&gt;将各个子树的补丁合并到&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/&quot;&gt;mainline&lt;/a&gt;仓库.&lt;/p&gt;
&lt;h2 id=&quot;coding-style&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#coding-style&quot; aria-label=&quot;Anchor link for: coding-style&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Coding Style&lt;/h2&gt;
&lt;aside data-position=&quot;right&quot;&gt;
    &lt;p&gt;在十几年前, 还很可能会收到一些不太优雅的回复.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;Linux Kernel有严格的编码风格要求, 细节查看&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://docs.kernel.org/process/coding-style.html&quot;&gt;Linux kernel coding style&lt;/a&gt;. 违反编码风格的补丁会被维护者拒绝.&lt;/p&gt;
&lt;p&gt;提交补丁前使用&lt;code&gt;scripts/checkpatch.pl&lt;/code&gt;脚本检查编码风格, 如果违反编码风格的代码看起来更好, 那么最好保持原样, 常见的噪音查看&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://kernelnewbies.org/CheckpatchTips&quot;&gt;CheckpatchTips&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;email-workflow&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#email-workflow&quot; aria-label=&quot;Anchor link for: email-workflow&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Email Workflow&lt;/h2&gt;
&lt;p&gt;Linux Kernel使用电子邮件工作流, 补丁通过电子邮件发送给维护者, 维护者审查通过后合并到子树. 使用&lt;code&gt;scripts/get_maintainer.pl&lt;/code&gt;脚本通过commit或文件查询维护者的邮件地址和相关邮件列表.&lt;/p&gt;
&lt;p&gt;推荐使用&lt;code&gt;git send-email&lt;/code&gt;发送补丁, &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://sourcehut.org&quot;&gt;sourcehut&lt;/a&gt;创建了基于此的电子邮件工作流教程&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://git-send-email.io&quot;&gt;git-send-email&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;patch-philosophy&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#patch-philosophy&quot; aria-label=&quot;Anchor link for: patch-philosophy&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Patch Philosophy&lt;/h2&gt;
&lt;p&gt;Linux Kernel对补丁有严格的格式要求, 细节查看&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://kernelnewbies.org/PatchPhilosophy&quot;&gt;PatchPhilosophy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;下面是使用&lt;code&gt;git format-patch&lt;/code&gt;生成的补丁示例:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;From d446483f4cbfc8f89973fc2aea1f2e7351d73c43 Mon Sep 17 00:00:00 2001&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;From: Xingquan Liu &amp;lt;b1n@b1n.io&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Date: Fri, 30 May 2025 13:08:53 -0400&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Subject: [PATCH] ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[1]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Signed-off-by: Xingquan Liu &amp;lt;b1n@b1n.io&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[2]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; test | 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; 1 file changed, 0 insertions(+), 0 deletions(-)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; create mode 100644 test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;diff --git a/test b/test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;new file mode 100644&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;index 000000000000..e69de29bb2d1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;Subject: [PATCH] ...&lt;/code&gt;是从补丁主题自动生成的邮件主题, 一般不直接修改, 而是使用&lt;code&gt;git commit --amend&lt;/code&gt;修改commit, 并重新生成补丁. 补丁主题也有严格的格式要求, 细节查看&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://kernelnewbies.org/PatchPhilosophy#Patch_subject_formatting&quot;&gt;Patch subject formatting&lt;/a&gt;. &lt;code&gt;Signed-off-by: ...&lt;/code&gt;是一个补丁标签, 证明代码符合&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://developercertificate.org&quot;&gt;Developer Certificate of Origin&lt;/a&gt;, 详细解释查看&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://kernelnewbies.org/PatchTipsAndTricks&quot;&gt;PatchTipsAndTricks&lt;/a&gt;. 可以通过&lt;code&gt;git config format.signOff yes&lt;/code&gt;命令启用自动补丁签署. 邮件主题下方[1]处是补丁描述. &lt;code&gt;---&lt;/code&gt;下方[2]处可以添加注释, 应用补丁时被忽略.&lt;/p&gt;
&lt;p&gt;维护者审查补丁后, 可能会要求修改, 修改后再次生成补丁应使用&lt;code&gt;git format-patch -v2&lt;/code&gt;命令. &lt;code&gt;-v2&lt;/code&gt;参数会在邮件主题中添加版本号: &lt;code&gt;Subject: [PATCH v2] ...&lt;/code&gt;. 还需要在[2]处添加补丁版本说明:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Signed-off-by: Xingquan Liu &amp;lt;b1n@b1n.io&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;v2:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Made commit message more clear&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Corrected grammer in code comment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Used new API instead of depreciated API&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; test | 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一系列相关的补丁合并为补丁集提交, 可以使用&lt;code&gt;git format-patch --cover-letter&lt;/code&gt;命令, 将注释写在单独的文件中.&lt;/p&gt;
&lt;h2 id=&quot;reply-email&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#reply-email&quot; aria-label=&quot;Anchor link for: reply-email&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Reply Email&lt;/h2&gt;
&lt;p&gt;提交补丁后, 可能会需要一些讨论, 以确定最终方案, 开发者需要回复电子邮件参与讨论. Linux Kernel要求邮件是内联的纯文本格式, 禁用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.ietf.org/rfc/rfc3676.txt&quot;&gt;format=flowed&lt;/a&gt;, 自动换行和GPG签名, 并使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://en.wikipedia.org/wiki/UTF-8&quot;&gt;UTF-8&lt;/a&gt;编码. 推荐使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://neomutt.org&quot;&gt;NeoMutt&lt;/a&gt;电子邮件客户端, 其他被认为纯文本支持良好的电子邮件客户端查看&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://useplaintext.email&quot;&gt;Use plain text email&lt;/a&gt;. 引用原始邮件内容时使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://en.wikipedia.org/wiki/Posting_style#Interleaved_style&quot;&gt;内联回复&lt;/a&gt;.&lt;/p&gt;
</content>
        <summary type="html">Linux Kernel开发所需的前置知识.</summary>
        </entry><entry xml:lang="zh-Hans">
        <title>Quality of Cyber Life</title>
        <published>2025-05-29T00:00:00+00:00</published>
        <updated>2025-06-02T00:00:00+00:00</updated>
        <author>
            <name>b1n</name>
        </author>
        <link rel="alternate" href="https://b1n.io/zh-Hans/blog/quality-of-cyber-life/" type="text/html"/>
        <id>https://b1n.io/zh-Hans/blog/quality-of-cyber-life/</id>
        
            <content type="html">&lt;p&gt;记录我在赛博世界的生活方式, 仅包含足以让感兴趣的人前进的指引. 推荐阅读&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://missing.csail.mit.edu&quot;&gt;The Missing Semester of Your CS Education&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;privacy-guides&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#privacy-guides&quot; aria-label=&quot;Anchor link for: privacy-guides&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Privacy Guides&lt;/h2&gt;
&lt;p&gt;真的需要仔细阅读&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://privacyguides.org&quot;&gt;Privacy Guides&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;keyboard-layout&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#keyboard-layout&quot; aria-label=&quot;Anchor link for: keyboard-layout&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Keyboard Layout&lt;/h2&gt;
&lt;p&gt;我使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://colemak.com&quot;&gt;Colemak&lt;/a&gt;键盘布局, 并且将&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://en.wikipedia.org/wiki/Caps_Lock&quot;&gt;Caps Lock&lt;/a&gt;映射为&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://en.wikipedia.org/wiki/Esc_key&quot;&gt;Esc&lt;/a&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;https://b1n.io/zh-Hans/blog/quality-of-cyber-life/#fn-1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;. 始终应该使用任何更高效, 更舒适的键盘布局替代&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://en.wikipedia.org/wiki/QWERTY&quot;&gt;QWERTY&lt;/a&gt;, 如果你的余生需要长时间敲击键盘.&lt;/p&gt;
&lt;h2 id=&quot;package-manager&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#package-manager&quot; aria-label=&quot;Anchor link for: package-manager&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Package Manager&lt;/h2&gt;
&lt;p&gt;我使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://brew.sh&quot;&gt;Homebrew&lt;/a&gt;和&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://nixos.org&quot;&gt;Nix&lt;/a&gt;包管理器, 分别用于管理GUI应用程序(&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://formulae.brew.sh/cask/&quot;&gt;Casks&lt;/a&gt;)和CLI软件包(&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://search.nixos.org/packages&quot;&gt;Packages&lt;/a&gt;). 使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/DeterminateSystems/nix-installer&quot;&gt;Determinate Nix Installer&lt;/a&gt;安装Nix.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/b1nhack/dotfiles/blob/main/Brewfile&quot;&gt;Brewfile&lt;/a&gt;记录了我通过Homebrew安装的Casks, 通过&lt;code&gt;brew bundle dump&lt;/code&gt;命令导出. &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/b1nhack/dotfiles/blob/main/nix-packages&quot;&gt;nix-packages&lt;/a&gt;记录了我通过Nix安装的Packages, 通过&lt;code&gt;nix profile list &amp;gt; nix-packages&lt;/code&gt;命令导出.&lt;/p&gt;
&lt;h2 id=&quot;terminal-emulator&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#terminal-emulator&quot; aria-label=&quot;Anchor link for: terminal-emulator&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Terminal Emulator&lt;/h2&gt;
&lt;p&gt;我使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://sw.kovidgoyal.net/kitty&quot;&gt;kitty&lt;/a&gt;终端模拟器, &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://wezterm.org&quot;&gt;WezTerm&lt;/a&gt;也是个不错的选择.&lt;/p&gt;
&lt;p&gt;kitty配置文件&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/b1nhack/dotfiles/blob/main/kitty/kitty.conf&quot;&gt;kitty.conf&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;font&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#font&quot; aria-label=&quot;Anchor link for: font&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Font&lt;/h2&gt;
&lt;p&gt;我使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.jetbrains.com/lp/mono/&quot;&gt;JetBrains Mono&lt;/a&gt;字体, 用于终端模拟器&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;https://b1n.io/zh-Hans/blog/quality-of-cyber-life/#fn-2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;和博客.&lt;/p&gt;
&lt;h2 id=&quot;unix-shell&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#unix-shell&quot; aria-label=&quot;Anchor link for: unix-shell&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Unix Shell&lt;/h2&gt;
&lt;p&gt;我使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.zsh.org&quot;&gt;Zsh&lt;/a&gt;, 配置文件目录&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/b1nhack/dotfiles/tree/main/zsh&quot;&gt;zsh&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;version-control-system&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#version-control-system&quot; aria-label=&quot;Anchor link for: version-control-system&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Version Control System&lt;/h2&gt;
&lt;p&gt;我使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://git-scm.com&quot;&gt;Git&lt;/a&gt; DVCS (Distributed Version Control System), 并使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/dandavison/delta&quot;&gt;delta&lt;/a&gt;增强Git的输出.&lt;/p&gt;
&lt;p&gt;Git配置文件&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/b1nhack/dotfiles/blob/main/git/config&quot;&gt;config&lt;/a&gt;, delta配置文件&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/b1nhack/dotfiles/blob/main/delta/delta.gitconfig&quot;&gt;delta.gitconfig&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;password-manager&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#password-manager&quot; aria-label=&quot;Anchor link for: password-manager&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Password Manager&lt;/h2&gt;
&lt;p&gt;我使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://keepassxc.org&quot;&gt;KeePassXC&lt;/a&gt;密码管理器, 配置文件&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/b1nhack/dotfiles/blob/main/keepassxc/keepassxc.ini&quot;&gt;keepassxc.ini&lt;/a&gt;. 一定要备份密码数据库文件!&lt;/p&gt;
&lt;h2 id=&quot;code-editor&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#code-editor&quot; aria-label=&quot;Anchor link for: code-editor&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Code Editor&lt;/h2&gt;
&lt;p&gt;我使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://neovim.io&quot;&gt;Neovim&lt;/a&gt;代码编辑器, 配置文件目录&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/b1nhack/nvim&quot;&gt;nvim&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;email-client&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#email-client&quot; aria-label=&quot;Anchor link for: email-client&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Email Client&lt;/h2&gt;
&lt;p&gt;我使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://neomutt.org&quot;&gt;NeoMutt&lt;/a&gt;电子邮件客户端. &lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.kernel.org&quot;&gt;Linux Kernel&lt;/a&gt;使用电子邮件工作流.&lt;/p&gt;
&lt;p&gt;配置文件目录&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/b1nhack/dotfiles/tree/main/neomutt&quot;&gt;neomutt&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;openpgp-implementation&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#openpgp-implementation&quot; aria-label=&quot;Anchor link for: openpgp-implementation&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
OpenPGP Implementation&lt;/h2&gt;
&lt;p&gt;我使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://gnupg.org&quot;&gt;GnuPG&lt;/a&gt; OpenPGP实现, 主要用于电子邮件加密和代码签名.&lt;/p&gt;
&lt;p&gt;配置文件目录&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com/b1nhack/dotfiles/tree/main/gnupg&quot;&gt;gnupg&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;software-development-platform&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#software-development-platform&quot; aria-label=&quot;Anchor link for: software-development-platform&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Software Development Platform&lt;/h2&gt;
&lt;p&gt;我主要使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://github.com&quot;&gt;GitHub&lt;/a&gt;软件开发平台, 一些重要的代码仓库会使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://codeberg.org&quot;&gt;Codeberg&lt;/a&gt;, 再通过Mirror功能同步到GitHub.&lt;/p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;Neovim需要频繁使用Esc切换模式. &lt;a href=&quot;https://b1n.io/zh-Hans/blog/quality-of-cyber-life/#fr-1-1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;终端模拟器使用&lt;a class=&quot;external&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://www.programmingfonts.org/#jetbrainsmono&quot;&gt;JetBrainsMono Nerd Font&lt;/a&gt;以显示大量图标. &lt;a href=&quot;https://b1n.io/zh-Hans/blog/quality-of-cyber-life/#fr-2-1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
        <summary type="html">一些重要的非技术知识清单, 提升效率和生活质量.</summary>
        </entry>
</feed>
