<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux on 庞玉栋个人博客</title><link>https://pangyd.com/tags/linux/</link><description>Recent content in Linux on 庞玉栋个人博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 20 Sep 2026 19:51:39 +0800</lastBuildDate><atom:link href="https://pangyd.com/tags/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>“只剩一群用 LLM 的菜鸟”：顶级黑客怒退 PS5 Linux 项目，几个月心血全打水漂</title><link>https://pangyd.com/post/radar-667/</link><pubDate>Sun, 20 Sep 2026 19:51:39 +0800</pubDate><guid>https://pangyd.com/post/radar-667/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>原文&lt;/strong>：&lt;a href="https://www.infoq.cn/article/kCUJZby0B8SZ6kIlULQD?utm_source=rss&amp;amp;utm_medium=article">“只剩一群用 LLM 的菜鸟”：顶级黑客怒退 PS5 Linux 项目，几个月心血全打水漂&lt;/a>&lt;/p>
&lt;p>&lt;strong>作者&lt;/strong>：Tina&lt;/p>
&lt;p>&lt;strong>来源&lt;/strong>：InfoQ 中国（架构）&lt;/p>
&lt;/blockquote>
&lt;h2 id="正文">正文&lt;/h2>
&lt;p>“这个圈子过去聚集着一批才华横溢的研究人员，如今却只剩下一群使用 LLM 的新手，写着一些连自己都不理解的破解代码。”&lt;/p>
&lt;p>9 月 16 日，PS5 Linux 核心开发者 Andy Nguyen 在 X 上写下这段话，随后宣布退出整个 PS5 圈子，停止自己在 PS5 Linux 上的全部开发工作。PS5 Linux 是一个开源项目，其加载器代码已采用 GPL 3.0 许可证发布在 GitHub。&lt;/p>
&lt;p>“我为这个项目倾注了全部心血，投入了几个月的人生，原本还计划完成对 PS5 Pro 的支持，并在 2027 年发布。现在这一切都打了水漂。”&lt;/p>
&lt;p>让他彻底放弃的，是一群被他称作“slop kiddies”（AI 垃圾小鬼）的人。他们用 LLM 找到了 PS5 仅存的那个虚拟机监控器漏洞，然后把它报告给了索尼，领走了赏金。这个漏洞，Nguyen 自己也早就发现了。他一直没有上报，想把它留到《GTA 6》发售之后——让玩家有机会合法买到新游戏，同时还能继续用 Linux。&lt;/p>
&lt;p>Nguyen 称，他曾请求对方至少等到《GTA 6》发售，对方也答应了。&lt;/p>
&lt;p>“连一天都没过去，他们就决定把这个漏洞白白浪费掉。”&lt;/p>
&lt;p>开喷的人，真的有资格看不起“AI 菜鸟”&lt;/p>
&lt;p>Andy Nguyen 在安全研究圈的名字是 TheFlow，在 PlayStation 圈活跃了十多年。PS Vita 的 VitaShell、h-encore，以及 PS4 的 PPPwn 远程代码执行利用链，都是他做的。&lt;/p></description></item><item><title>深入理解Java虚拟机到底是什么</title><link>https://pangyd.com/post/180-java/</link><pubDate>Fri, 24 Nov 2017 22:54:49 +0800</pubDate><guid>https://pangyd.com/post/180-java/</guid><description>&lt;p>什么是Java虚拟机&lt;/p>&lt;div class="content rich" data-reactid=".0.1.0.0.0.1.1.1">&lt;p>作为一个Java程序员，我们每天都在写Java代码，我们写的代码都是在一个叫做Java虚拟机的东西上执行的。但是如果要问什么是虚拟机，恐怕很多人就会模棱两可了。在本文中，我会写下我对虚拟机的理解。因为能力所限，可能有些地方描述的不够欠当。如果你有不同的理解，欢迎交流。&lt;/p>&lt;p>我们都知道java程序必须在虚拟机上运行。那么虚拟机到底是什么呢？先看网上搜索到的比较靠谱的解释：&lt;/p>&lt;p>虚拟机是一种抽象化的计算机，通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构，如处理器、堆栈、寄存器等，还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息，使得Java程序只需生成在Java虚拟机上运行的目标代码（字节码），就可以在多种平台上不加修改地运行。&lt;/p>&lt;p>这种解释应该算是正确的，但是只描述了虚拟机的外部行为和功能，并没有针对内部原理做出说明。一般情况下我们不需要知道虚拟机的运行原理，只要专注写java代码就可以了，这也正是虚拟机之所以存在的原因--屏蔽底层操作系统平台的不同并且减少基于原生语言开发的复杂性，使java这门语言能够跨各种平台（只要虚拟机厂商在特定平台上实现了虚拟机），并且简单易用。这些都是虚拟机的外部特性，但是从这些信息来解释虚拟机，未免太笼统了，无法让我们知道内部原理。&lt;/p>&lt;p>从进程的角度解释JVM&lt;/p>&lt;p>让我们尝试从操作系统的层面来理解虚拟机。我们知道，虚拟机是运行在操作系统之中的，那么什么东西才能在操作系统中运行呢？当然是进程，因为进程是操作系统中的执行单位。可以这样理解，当它在运行的时候，它就是一个操作系统中的进程实例，当它没有在运行时（作为可执行文件存放于文件系统中），可以把它叫做程序。&lt;/p>&lt;p>对命令行比较熟悉的同学，都知道其实一个命令对应一个可执行的二进制文件，当敲下这个命令并且回车后，就会创建一个进程，加载对应的可执行文件到进程的地址空间中，并且执行其中的指令。下面对比C语言和Java语言的HelloWorld程序来说明问题。&lt;/p>&lt;p>首先编写C语言版的HelloWorld程序。&lt;/p>&lt;p>&lt;span>[cpp]&lt;/span>view plain copy&lt;/p>&lt;p>#include&lt;/p>&lt;p>#include&lt;/p>&lt;p>int main(void) {&lt;/p>&lt;p>printf("hello world\n");&lt;/p>&lt;p>return 0;&lt;/p>&lt;p>}&lt;/p>&lt;p>编译C语言版的HelloWorld程序：&lt;/p>&lt;p>&lt;span>[plain]&lt;/span>view plain copy&lt;/p>&lt;p>gcc HelloWorld.c -o HelloWorld&lt;/p>&lt;p>运行C语言版的HelloWorld程序：&lt;/p>&lt;p>&lt;span>[plain]&lt;/span>view plain copy&lt;/p>&lt;p>zhangjg@linux:/deve/workspace/HelloWorld/src$ ./HelloWorld&lt;/p>&lt;p>hello world&lt;/p>&lt;p>gcc编译器编译后的文件直接就是可被操作系统识别的二进制可执行文件，当我们在命令行中敲下 ./HelloWorld这条命令的时候， 直接创建一个进程， 并且将可执行文件加载到进程的地址空间中， 执行文件中的指令。&lt;/p>&lt;p>作为对比， 我们看一下Java版HelloWord程序的编译和执行形式。&lt;/p>&lt;p>首先编写源文件HelloWord.java ：&lt;/p>&lt;p>&lt;span>[java]&lt;/span>view plain copy&lt;/p>&lt;p>public class HelloWorld {&lt;/p>&lt;p>public static void main(String[] args) {&lt;/p>&lt;p>}&lt;/p>&lt;p>}&lt;/p>&lt;p>编译Java版的HelloWorld程序：&lt;/p>&lt;p>&lt;span>[java]&lt;/span>view plain copy&lt;/p>&lt;p>zhangjg@linux:/deve/workspace/HelloJava/src$ javac HelloWorld.java&lt;/p>&lt;p>zhangjg@linux:/deve/workspace/HelloJava/src$ ls&lt;/p>&lt;p>HelloWorld.class HelloWorld.java&lt;/p></description></item><item><title>Java在各个操作系统中的安装方式</title><link>https://pangyd.com/post/150-java/</link><pubDate>Mon, 30 Oct 2017 17:43:48 +0800</pubDate><guid>https://pangyd.com/post/150-java/</guid><description>&lt;p>&lt;br>&lt;/p>&lt;div class="content rich" data-reactid=".1colohowohs.1.0.0.0.1.1.1">&lt;p>&lt;span>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" img_width="640" img_height="360" alt="java逆天攻略：快速进入大数据开发核心技术" inline="0">&lt;/span>&lt;/p>&lt;p>&lt;span>前言&lt;/span>&lt;/p>&lt;p>&lt;span>Java安装应该是件非常简单的事情，不知何时在Oracle官方下载JDK时，竟然强制要求用户登陆。这样就不能通过Linux命令wget下载了，真是有点让人火大。&lt;/span>&lt;/p>&lt;p>&lt;span>想了个办法破解这种恶心的cookies验证行为！&lt;/span>&lt;/p>&lt;blockquote>&lt;p>&lt;span>对大数据感兴趣的朋友可以加群大数据视频学习交流群 675590728&lt;/span>&lt;/p>&lt;/blockquote>&lt;p>&lt;span>目录&lt;/span>&lt;/p>&lt;ul class=" list-paddingleft-2">&lt;li>&lt;p>&lt;span>Java在Windows中安装&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>Java在Linux Ubuntu中安装&lt;/span>&lt;/p>&lt;/li>&lt;/ul>&lt;p>&lt;span>1 Java在Windows中安装&lt;/span>&lt;/p>&lt;p>&lt;span>Java环境安装，是指Java开发环境的安装，包括JDK安装和Java的环境配置。在Windows中，很多的Java应用通过JRE就可以运行。但对Java的开发者来说，我们需要安装JDK，必须Oracle SUN官方发布的JDK。&lt;/span>&lt;/p>&lt;blockquote>&lt;p>&lt;span>在Windows系统上安装JDK是件非常简单的事情，对大数据感兴趣的朋友可以加群大数据视频学习交流群 675590728&lt;/span>&lt;/p>&lt;/blockquote>&lt;p>&lt;span>大家可以下载最新版本的Java SE 8，或者较早的JDK版本。本文中使用的是1.6.0_45版本的JDK。&lt;/span>&lt;/p>&lt;p>&lt;span>下载后，双击安装。我安装在目录: D:	oolkitjavajdk6&lt;/span>&lt;/p>&lt;p>&lt;span>安装好JDK后，配置环境变量：&lt;/span>&lt;/p>&lt;p>&lt;span>选择：控制面板 –&amp;gt; 系统和安全 –&amp;gt; 系统属性 –&amp;gt; 高级 –&amp;gt; 环境变量&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" img_width="821" img_height="720" alt="java逆天攻略：快速进入大数据开发核心技术" inline="0">&lt;/span>&lt;/p>&lt;pre>#&amp;nbsp;新建JAVA_HOME变量JAVA_HOME=D:	oolkitjavajdk6#&amp;nbsp;新建PATH变量PATH=D:&amp;nbsp;oolkitjavajdk6in&lt;/pre>&lt;p>&lt;span>注：如果PATH变量已存在，则在最后增加JDK的路径，用分号(;)与上个配置做分隔。&lt;/span>&lt;/p>&lt;p>&lt;span>保存后，打开CMD命令窗口，测试Java的命令行操作。&lt;/span>&lt;/p>&lt;pre>#&amp;nbsp;查看Java安装版本~&amp;nbsp;C:UsersAdministrator&amp;gt;java&amp;nbsp;-versionjava&amp;nbsp;version&amp;nbsp;"1.6.0_45"Java(TM)&amp;nbsp;SE&amp;nbsp;Runtime&amp;nbsp;Environment&amp;nbsp;(build&amp;nbsp;1.6.0_45-b06)Java&amp;nbsp;HotSpot(TM)&amp;nbsp;64-Bit&amp;nbsp;Server&amp;nbsp;VM&amp;nbsp;(build&amp;nbsp;20.45-b01,&amp;nbsp;mixed&amp;nbsp;mode)#&amp;nbsp;测试Java命令~&amp;nbsp;C:UsersAdministrator&amp;gt;javaUsage:&amp;nbsp;java&amp;nbsp;[-options]&amp;nbsp;class&amp;nbsp;[args...]&amp;nbsp;(to&amp;nbsp;execute&amp;nbsp;a&amp;nbsp;class)&amp;nbsp;or&amp;nbsp;java&amp;nbsp;[-options]&amp;nbsp;-jar&amp;nbsp;jarfile&amp;nbsp;[args...]&amp;nbsp;(to&amp;nbsp;execute&amp;nbsp;a&amp;nbsp;jar&amp;nbsp;file)where&amp;nbsp;options&amp;nbsp;include:&amp;nbsp;-server&amp;nbsp;to&amp;nbsp;select&amp;nbsp;the&amp;nbsp;"server"&amp;nbsp;VM&amp;nbsp;-hotspot&amp;nbsp;is&amp;nbsp;a&amp;nbsp;synonym&amp;nbsp;for&amp;nbsp;the&amp;nbsp;"server"&amp;nbsp;VM&amp;nbsp;[deprecated]&amp;nbsp;The&amp;nbsp;default&amp;nbsp;VM&amp;nbsp;is&amp;nbsp;server.&amp;nbsp;-cp-classpathA&amp;nbsp;;&amp;nbsp;separated&amp;nbsp;list&amp;nbsp;of&amp;nbsp;directories,&amp;nbsp;JAR&amp;nbsp;archives,&amp;nbsp;and&amp;nbsp;ZIP&amp;nbsp;archives&amp;nbsp;to&amp;nbsp;search&amp;nbsp;for&amp;nbsp;class&amp;nbsp;files.&amp;nbsp;-D=set&amp;nbsp;a&amp;nbsp;system&amp;nbsp;property&amp;nbsp;-verbose[:class|gc|jni]&amp;nbsp;enable&amp;nbsp;verbose&amp;nbsp;output&amp;nbsp;-version&amp;nbsp;print&amp;nbsp;product&amp;nbsp;version&amp;nbsp;and&amp;nbsp;exit&amp;nbsp;-version:require&amp;nbsp;the&amp;nbsp;specified&amp;nbsp;version&amp;nbsp;to&amp;nbsp;run&amp;nbsp;-showversion&amp;nbsp;print&amp;nbsp;product&amp;nbsp;version&amp;nbsp;and&amp;nbsp;continue&amp;nbsp;-jre-restrict-search&amp;nbsp;|&amp;nbsp;-jre-no-restrict-search&amp;nbsp;include/exclude&amp;nbsp;user&amp;nbsp;private&amp;nbsp;JREs&amp;nbsp;in&amp;nbsp;the&amp;nbsp;version&amp;nbsp;search&amp;nbsp;-?&amp;nbsp;-help&amp;nbsp;print&amp;nbsp;this&amp;nbsp;help&amp;nbsp;message&amp;nbsp;-X&amp;nbsp;print&amp;nbsp;help&amp;nbsp;on&amp;nbsp;non-standard&amp;nbsp;options&amp;nbsp;-ea[:...|:]&amp;nbsp;-enableassertions[:...|:]&amp;nbsp;enable&amp;nbsp;assertions&amp;nbsp;-da[:...|:]&amp;nbsp;-disableassertions[:...|:]&amp;nbsp;disable&amp;nbsp;assertions&amp;nbsp;-esa&amp;nbsp;|&amp;nbsp;-enablesystemassertions&amp;nbsp;enable&amp;nbsp;system&amp;nbsp;assertions&amp;nbsp;-dsa&amp;nbsp;|&amp;nbsp;-disablesystemassertions&amp;nbsp;disable&amp;nbsp;system&amp;nbsp;assertions&amp;nbsp;-agentlib:[=]&amp;nbsp;load&amp;nbsp;native&amp;nbsp;agent&amp;nbsp;library,&amp;nbsp;e.g.&amp;nbsp;-agentlib:hprof&amp;nbsp;see&amp;nbsp;also,&amp;nbsp;-agentlib:jdwp=help&amp;nbsp;and&amp;nbsp;-agentlib:hprof=help&amp;nbsp;-agentpath:[=]&amp;nbsp;load&amp;nbsp;native&amp;nbsp;agent&amp;nbsp;library&amp;nbsp;by&amp;nbsp;full&amp;nbsp;pathname&amp;nbsp;-javaagent:[=]&amp;nbsp;load&amp;nbsp;Java&amp;nbsp;programming&amp;nbsp;language&amp;nbsp;agent,&amp;nbsp;see&amp;nbsp;java.lang.instrument&amp;nbsp;-splash:show&amp;nbsp;splash&amp;nbsp;screen&amp;nbsp;with&amp;nbsp;specified&amp;nbsp;image#&amp;nbsp;测试Javac命令~&amp;nbsp;C:UsersAdministrator&amp;gt;javac用法：javac&amp;nbsp;&amp;lt;选项&amp;gt;&amp;nbsp;&amp;lt;源文件&amp;gt;其中，可能的选项包括：&amp;nbsp;-g&amp;nbsp;生成所有调试信息&amp;nbsp;-g:none&amp;nbsp;不生成任何调试信息&amp;nbsp;-g:{lines,vars,source}&amp;nbsp;只生成某些调试信息&amp;nbsp;-nowarn&amp;nbsp;不生成任何警告&amp;nbsp;-verbose&amp;nbsp;输出有关编译器正在执行的操作的消息&amp;nbsp;-deprecation&amp;nbsp;输出使用已过时的&amp;nbsp;API&amp;nbsp;的源位置&amp;nbsp;-classpath&amp;nbsp;&amp;lt;路径&amp;gt;&amp;nbsp;指定查找用户类文件和注释处理程序的位置&amp;nbsp;-cp&amp;nbsp;&amp;lt;路径&amp;gt;&amp;nbsp;指定查找用户类文件和注释处理程序的位置&amp;nbsp;-sourcepath&amp;nbsp;&amp;lt;路径&amp;gt;&amp;nbsp;指定查找输入源文件的位置&amp;nbsp;-bootclasspath&amp;nbsp;&amp;lt;路径&amp;gt;&amp;nbsp;覆盖引导类文件的位置&amp;nbsp;-extdirs&amp;nbsp;&amp;lt;目录&amp;gt;&amp;nbsp;覆盖安装的扩展目录的位置&amp;nbsp;-endorseddirs&amp;nbsp;&amp;lt;目录&amp;gt;&amp;nbsp;覆盖签名的标准路径的位置&amp;nbsp;-proc:{none,only}&amp;nbsp;控制是否执行注释处理和/或编译。&amp;nbsp;-processor[,,...]要运行的注释处理程序的名称；绕过默认的搜索进程&amp;nbsp;-processorpath&amp;nbsp;&amp;lt;路径&amp;gt;&amp;nbsp;指定查找注释处理程序的位置&amp;nbsp;-d&amp;nbsp;&amp;lt;目录&amp;gt;&amp;nbsp;指定存放生成的类文件的位置&amp;nbsp;-s&amp;nbsp;&amp;lt;目录&amp;gt;&amp;nbsp;指定存放生成的源文件的位置&amp;nbsp;-implicit:{none,class}&amp;nbsp;指定是否为隐式引用文件生成类文件&amp;nbsp;-encoding&amp;nbsp;&amp;lt;编码&amp;gt;&amp;nbsp;指定源文件使用的字符编码&amp;nbsp;-source&amp;nbsp;&amp;lt;版本&amp;gt;&amp;nbsp;提供与指定版本的源兼容性&amp;nbsp;-target&amp;nbsp;&amp;lt;版本&amp;gt;&amp;nbsp;生成特定&amp;nbsp;VM&amp;nbsp;版本的类文件&amp;nbsp;-version&amp;nbsp;版本信息&amp;nbsp;-help&amp;nbsp;输出标准选项的提要&amp;nbsp;-Akey[=value]&amp;nbsp;传递给注释处理程序的选项&amp;nbsp;-X&amp;nbsp;输出非标准选项的提要&amp;nbsp;-J&amp;lt;标志&amp;gt;&amp;nbsp;直接将&amp;nbsp;&amp;lt;标志&amp;gt;&amp;nbsp;传递给运行时系统&lt;/pre>&lt;p>&lt;span>这样我们就在Windows的系统中，配置好了Java环境。&lt;/span>&lt;/p>&lt;p>&lt;span>2 Java在Linux Ubuntu中安装&lt;/span>&lt;/p>&lt;p>&lt;span>Java安装，指定的是SUN Oracle官方的JDK软件包，而不是Linux Ubuntu系统中通过apt-get安装的OpenJDK。&lt;/span>&lt;/p>&lt;p>&lt;span>注：请一定注意版本，必须使用SUN Oracle官方的JDK软件包&lt;/span>&lt;/p>&lt;p>&lt;span>在Linux Ubuntu中，下载并安装JDK，这里我选择安装Java SE 1.6.45的64位版本的JDK。&lt;/span>&lt;/p>&lt;p>&lt;span>2.1 下载JDK&lt;/span>&lt;/p>&lt;p>&lt;span>不知道Oracle官方网站时候调整的JDK下载需要先登陆，因此直接使用wget命令，无法完成JDK的下载。&lt;/span>&lt;/p>&lt;p>&lt;span>我们有下面2种解决方法：&lt;/span>&lt;/p>&lt;ul class=" list-paddingleft-2">&lt;li>&lt;p>&lt;span>1). 从浏览器中登陆下载，然后再传到Linux的服务器&lt;/span>&lt;/p></description></item></channel></rss>