2024 12 28 HackerNews

2024-12-28 Hacker News Top Stories #

  1. Ghostty 是一个终端仿真器,它在速度、功能和原生用户界面方面具有独特的优势。
  2. 近年来,民航客机因误被击落而导致的死亡人数已成为商业航空事故的主要原因。
  3. 当前 AI 代表了一个死胡同,因为每次神经网络的浪潮都导致了一个死胡同。
  4. 美国总统乔·拜登签署了一项法案,要求美国机构共享自定义源代码。
  5. 卢卡·伊亚科尼-斯图尔特用曼尼拉文件夹制作了一架1:60比例的印度航空波音777-300ER模型。
  6. 设计一个简单的 CPU 指令集和虚拟机可以帮助理解计算机的原理。
  7. Quiver 是一个现代化的交换图编辑器,用于创建和编辑交换图和粘贴图。
  8. Lua 是一个被低估的语言,虽然它在游戏和嵌入式系统中很常用,但它的优点和能力并没有得到足够的认可。
  9. WebAuthn 的注册过程中存在一些棘手的边缘情况,例如网络条件差导致创建的密钥无法到达服务器。
  10. 作者使用手写的最小 ELF 头和汇编代码来实现从 C 代码生成最小的 ELF 文件。

Ghostty 1.0 #

https://ghostty.org/

Ghostty 是一个终端仿真器,它在速度、功能和原生用户界面方面具有独特的优势。与市面上许多优秀的终端仿真器不同,用户通常需要在速度、功能和原生体验之间做出选择,而 Ghostty 则致力于在这三者之间取得平衡。

Ghostty 是由 Mitchell Hashimoto 开发的一个个人项目,开发团队的成员都是在业余时间贡献力量,旨在创造一个高质量的终端仿真器。

原生体验 #

Ghostty 的设计理念是让其在外观、感觉和行为上都与用户的桌面环境相符。具体而言:

  • 在 macOS 上,Ghostty 的图形用户界面(GUI)使用 Swift 编写,并依赖于 AppKit 和 SwiftUI。
  • 在 Linux 上,GUI 使用 Zig 编写,并利用 GTK4 C API。
  • 两个平台的 GUI 都与一个名为 “libghostty” 的共享核心库相连接。libghostty 是用 Zig 语言编写的,能够生成本地机器码。

Ghostty 使用原生 UI 组件来实现诸如标签、分屏和错误消息等功能,这与许多其他终端仿真器使用文本界面或自定义控件的做法有所不同。此外,Ghostty 还采用了与各个平台一致的标准键盘和鼠标快捷键,以增强用户体验。

功能丰富 #

Ghostty 提供了丰富的功能,可以分为两大类:

  1. ** 终端功能 **:包括支持 Kitty 图形协议、亮暗模式通知、超链接等。这使得在 Ghostty 中运行的终端应用(如 Neovim、Zellij 等)可以实现更高级的功能。
  2. ** 应用功能 **:包括原生标签、分屏、macOS 上的下拉终端、根据系统亮暗模式自动切换主题等功能。

追求速度 #

Ghostty 致力于在速度上与市场上最快的终端仿真器相提并论。虽然在某些基准测试中速度可能有所不同,但 Ghostty 在任何情况下都不应被视为慢速应用。Ghostty 的 “快速” 不仅指启动时间,还包括滚动速度、输入输出吞吐量等多个方面。

架构独特 #

Ghostty 的核心是一个跨平台的、兼容 C ABI 的库,称为 libghostty。这个库负责终端仿真、字体处理和渲染能力。Ghostty 的 GUI 应用是这个库的消费者,macOS 应用使用 Swift,而 Linux 应用则使用 Zig 编写。这个架构实现了终端仿真与 GUI 之间的清晰分离,使得 Ghostty 能够提供原生的体验。

Ghostty 的架构还旨在促进其他终端仿真器项目的开发,使其可以基于共享核心构建,从而推动终端仿真器生态系统的多样性。目前,libghostty 还没有稳定的 API,并未以独立库的形式发布,但已在 macOS 和 Linux 应用中使用。未来的目标是稳定 API,并将其发布为独立库。

总之,Ghostty 是一个速度快、功能丰富且具有原生体验的终端仿真器,旨在用户提供更好的使用体验。


HN 热度 2086 points | 评论 606 comments | 作者:matrixhelix | 1 day ago #

https://news.ycombinator.com/item?id=42517447

  • Ghostty 是一个很棒的终端模拟器,作者在过去两年中投入了大量的时间和精力。
  • Ghostty 有不同的设计目标和权衡,如果它适合你,那就很好,如果不适合,你还有很多其他好的选择。
  • Ghostty 支持原生应用程序在所有主要平台上运行,包括 Linux、macOS 和 Windows。
  • Ghostty 的开发者致力于提供高质量的用户体验,包括支持变帧率和降低功耗。
  • Ghostty 的开发者还在努力实现 tmux 控制模式支持,这将是一个重要的功能。
  • 有些人认为,Ghostty 可能会成为第一个支持 tmux 控制模式的 Linux 终端模拟器。
  • 有些人认为,Ghostty 的开发者应该重点解决性能问题,例如最大渲染速度和损伤跟踪。
  • 有些人认为,Ghostty 的开发者应该考虑到用户的需求,例如支持离线工作和降低功耗。
  • 有些人认为,Ghostty 的开发者应该学习其他终端模拟器的优点,例如 iTerm2 的功能丰富性。
  • 有些人认为,Ghostty 的开发者应该保持谦逊,承认其他终端模拟器的优点。

Missiles are now the biggest killer of airline passengers #

https://www.wsj.com/world/flight-deaths-shot-from-sky-rising-798fd31e

近年来,民航客机因误被击落而导致的死亡人数已成为商业航空事故的主要原因,这一趋势与总体航空安全改善的情况形成鲜明对比。根据国际航空安全网络(ASN)的数据,自 2014 年以来,与武装冲突相关的客机致死事件已超过 500 人。如果最近在哈萨克斯坦发生的阿塞拜疆航空客机坠毁事件被确认是由于空中袭击造成,这将是自 2014 年以来第三起重大致命客机击落事件。

根据初步调查,阿塞拜疆航空的客机可能是被俄罗斯的防空导弹或其弹片击中。航空安全专家表示,除了恐怖分子和恐怖组织等传统威胁外,现在还有这种意外击落的风险。过去十年中,商业航班没有出现任何致命的空中击落事件,但近几年这一情况发生了显著变化。

民航客机死亡人数的增加与国际上武装冲突的数量上升及强大防空武器的普及密切相关。最近的事件表明,在冲突区域飞行的民航客机难以得到有效保护,尤其是在战斗情况下,区分敌友和评估威胁往往需要在不完全信息的情况下做出迅速决策,这种判断通常是由紧张和激动的士兵作出的。

例如,在乌克兰战争和中东冲突升级的背景下,民航客机的安全风险不断增加。今年 10 月,伊朗对以色列的突袭使得数百架在空中走廊上空的商业航班措手不及。随着冲突的加剧,航空公司和航空监管机构在保障民航安全与军事行动的保密之间面临巨大压力。

虽然商业航空整体安全水平有所提高,2022 年和 2023 年的死亡率显著下降,但航空安全专家仍对冲突地区的航空安全表示担忧。许多航空公司在决定是否继续飞往战区时,常常需要在安全风险与经济损失之间做出艰难平衡。此外,尽管在 2020 年乌克兰国际航空公司航班 PS752 被伊朗军方误击落后,针对战争区域的商业航班安全标准化的努力有所提出,但至今进展有限。

针对这一情况,加拿大外交部已要求俄罗斯对近期坠毁事件进行 “公开透明” 的调查,并接受调查结果。同时,许多航空公司的飞行员对在中东及其周边区域的飞行表示担忧,要求更新飞行保险政策,以保障在战区飞行时的权益。

总体来看,尽管商业航空在安全性方面取得了显著进展,但当前的地缘政治形势以及冲突的频发仍给民航安全带来了严峻挑战。


HN 热度 514 points | 评论 366 comments | 作者:JumpCrisscross | 12 hours ago #

https://news.ycombinator.com/item?id=42521598

  • 由于军方对未知来源的无人机采取不攻击的命令,误伤民用飞机的风险高于无人机的即时威。
  • 无人机可以进行高分辨率拍摄和信号干扰,而卫星的监控能力受限于轨道和可用燃料。
  • 大多数人对机和的辨识能力差,很多的无人机目击事件是民航。
  • 政未有效应对对无人机的恐慌导致人们产生误解和过反应。
  • 飞行物是违法的,且可能导致意伤,公众对此乏基本认知。 人们在缺乏信息时容易产生集体恐慌,可能导致错误的判断和行为。
  • 通过无人机进行的商业活动(LIDAR 测绘)可能被误认为是敌对活动。
  • 军事基地附近的信号可能被无人机截获,但这种截获的有效性和潜在威胁尚不明确。
  • 尽管政府对无人机的响应措施被认为过于缓慢和不充分,但也不应将所有责任归咎于政府。
  • 在面对无人机的恐慌时,很多人对航空安全的基础知识和法律缺乏了解,造成了混乱。

Does current AI represent a dead end? #

https://www.bcs.org/articles-opinion-and-research/does-current-ai-represent-a-dead-end/

本文是英国计算机学会(BCS)网站上的一篇文章,讨论了当前人工智能(AI)系统的局限性和潜在风险。作者 Eerke Boiten 教授认为,当前的 AI 系统不适合用于严肃的应用,因为它们的复杂性和不可管理性使得它们难以被信任。

文章指出,软件工程的原则要求软件系统必须是可信的,这意味着它们的开发必须是可管理的、透明的和负责的。但是,当前的 AI 系统不符合这些原则,因为它们的行为是“涌现”的,也就是说,它们的行为不能从它们的组成部分中推导出来。

作者还指出,当前的 AI 系统通常使用大量的神经网络,包括生成式 AI 和大型语言模型(LLM)。这些系统的训练需要大量的计算资源和数据,但它们的行为却难以被解释和理解。

文章最后指出,当前的 AI 系统不适合用于严肃的应用,例如医疗、金融和安全等领域,因为它们的不可靠性和不可预测性可能会导致严重的后果。作者呼吁人们重新审视当前的 AI 系统,并寻找更可靠和更负责的方法来开发和使用 AI 技术。


HN 热度 470 points | 评论 868 comments | 作者:jnord | 11 hours ago #

https://news.ycombinator.com/item?id=42521865

  • 当前 AI 代表了一个死胡同,因为每次神经网络的浪潮都导致了一个死胡同。
  • 这是因为数学方法无法映射到机制解释上,无法产生直观的理解。
  • 甚至有可能通过增加间接层来解决这个问题,但这可能行不通。
  • 当前的 AI 系统没有内部结构与其功能相关。
  • 作者对大型语言模型(LLM)能够使语义搜索更容易感到兴奋,并对自然语言处理工具的改进印象深刻。
  • 但作者认为当前的 AI 已经接近了死胡同。
  • 如果模型像 O3 一样变得超级便宜并且性能更好,那么当前的观点可能不成立。
  • 等待 O3 的实际应用结果再下结论。
  • Mamba 模型可能是实现廉价推理的突破,但现在宣布死胡同还为时过早。
  • OpenAI 善于制造炒作,当 Sora 宣布时大家都认为它会革命性地改变世界,但实际上并没有。
  • 人们对可能威胁自己生存的事情非常感兴趣,OpenAI 的每一次发布都暗示着人们可能会变得没有价值。
  • 我们创造的只是一个好的抄袭者,真正的“智能”来自于创造训练数据的 humans。-炒作终究会消失,现实才是王道。
  • O1 与 GPT4/Claude 3.5 相比没有太大的进步。
  • 但 O3-mini 模型在快速、准确地回答问题方面表现出色。
  • O3-mini 模型可以作为一个有用的工具,但仍然不足以作为一个代理。
  • 即使是订阅 O3 模型,也不值得为此花费大量金钱。
  • GPT 4 不能写出一个工作的网页抓取器来完成任务,但 O1 可以。
  • O1 还能够写出 ffmpeg 前端来处理重复性任务。
  • Claude 模型可能会带来更好的代码结果。
  • 与编码 LLM 合作可能会类似于与团队成员讨论项目细节。
  • AI 带来的主要危害被忽视了,人们被误导性地认为 AI 会取代工作,导致大规模裁员。
  • AI 生成的模糊工作使得人们难以找到真正的工作机会,导致贫困和脑力流失。
  • 媒体宣称一切都会变得更好,但实际上统计数据被操纵,人们的生活并没有改善。
  • 当人们找不到工作时,他们会变得绝望,并可能转向犯罪和动乱。
  • 这种情况早在几十年前就被预见到了,但被忽视了。
  • 我们无法及时反应,导致了灾难性的后果。

Bill requiring US agencies to share source code with each other becomes law #

https://fedscoop.com/agencies-must-share-custom-source-code-under-new-share-it-act/

美国总统乔·拜登于 12 月 23 日签署了一项要求美国各个机构共享自定义源代码的法案。该法案名为《源代码协调和重用信息技术法》(SHARE IT Act),目的是减少政府在软件采购上的浪费。根据该法案,机构将被要求公开列出自定义代码,并与其他机构共享。该法案不适用于机密代码、国家安全系统或共享代码可能存在隐私风险的情况。

该法案由参议员特德·克鲁兹(Ted Cruz)和加里·彼得斯(Gary Peters)在参议院提出,由众议员尼古拉斯·兰沃西(Nicholas Langworthy)和威廉·蒂蒙斯(William Timmons)在众议院提出。两院都以压倒性多数通过了该法案。

根据该法案,机构的首席信息官必须在法案生效后 180 天内制定政策,以确保自定义代码符合最佳实践,建立一个过程以公开自定义代码的元数据,并制定一个标准化的报告过程。元数据包括自定义代码的开发合同信息、合同编号和代码存储库的超链接。

该法案得到了行业的支持,包括 Atlassian 和 GitLab Inc.的支持。Atlassian 的总法律顾问斯坦·谢泼德(Stan Shepard)表示,该公司与国会共享信念,即自定义代码的共享将促进政府机构的开放、效率和创新。

该法案的通过被认为是政府机构在软件采购方面的一项重要改革,旨在减少浪费和提高效率。


HN 热度 433 points | 评论 159 comments | 作者:speckx | 1 day ago #

https://news.ycombinator.com/item?id=42518833

  • 美国军方的 IT 系统非常复杂,面临着来自各国的网络攻击,每天都在与黑客斗争。
  • 军方的 IT 系统非常保守,使用的软件和系统非常旧,导致难以与现代技术兼容。
  • 军方的安全政策非常严格,导致内部软件开发和共享非常困难。
  • 政府机构和承包商之间的软件所有权问题是一个大难题。
  • Facebook 等大型科技公司也面临着网络攻击,但程度不如军方。
  • Linux 操作系统在服务器端的占比很高,约为 62.7%。
  • 军方的安全系统 JWICS 非常强大,但也存在人为错误的问题。
  • 政府机构之间的软件共享和协作非常困难,导致项目进展缓慢。
  • 政府承包的软件开发项目往往存在重复开发的问题,导致浪费。
  • 美国军方不是世界上最大的雇主,根据维基百科的数据,沃尔玛的员工数量更高。

Scale Model of Boeing 777-300ER, Made from Manila Folders #

https://www.lucaiaconistewart.com/model-777

这个网页是关于一个叫卢卡·伊亚科尼-斯图尔特的人的个人网站,他是一个 UX 设计师和航空模型爱好者。网页的主体内容是关于他如何用曼尼拉文件夹制作了一架 1:60 比例的印度航空波音 777-300ER 模型。

卢卡从 2008 年开始这个项目,最初是为了挑战自己制作一个非传统形状的模型。他使用 Adobe Illustrator 设计和打印模型的各个部分,然后用胶水将它们组装起来。整个项目花费了大量的时间和精力,卢卡还制作了一个视频来展示他的设计和制作过程。

网页还包括卢卡的其他作品,例如一个用回收木材制作的椅子,以及一些他的个人信息和联系方式。卢卡还在社交媒体平台上分享了他的作品,包括 Instagram、Flickr 和 YouTube。


HN 热度 383 points | 评论 65 comments | 作者:uticus | 8 hours ago #

https://news.ycombinator.com/item?id=42523745

  • 对于这个模型的制作过程,有人认为其细节和复杂性非常高,虽不及真正飞机的建造,但在个人努力层面上可以相提并论。
  • 有人指出,制作现代客机需要的时间和人力远超这个模型,不应简单对比。
  • 讨论中有人提到,有时艺术或魔术的效果是通过超乎寻常的努力与专注实现的。
  • 一些评论者认为设计和制作这样的模型需要特殊的技巧和工具,尤其是如何将三维对象转化为二维设计。
  • 参与讨论的人对马尼拉文件夹的使用表示好奇,认为其在建模中的优势可能与材质和厚度有关。
  • 有人分享了自己对飞行和航空公司的经验,表示对 777 机型的赞赏。
  • 讨论中提到,创造性和专注在制作过程中是非常重要的,即使对某些人来说这是一种挑战。
  • 评论者对模型制作者的网站给予了高度评价,认为其设计也体现了制作模型时的细致入微。

Write Your Own Virtual Machine (2022) #

https://www.jmeiners.com/lc3-vm/

本文是一篇关于如何编写自己的虚拟机(VM)的教程。虚拟机是一种程序,可以模拟计算机的行为,执行机器语言程序。教程首先介绍了虚拟机的概念和作用,然后详细讲解了如何编写一个虚拟机,包括如何定义虚拟机的指令集、如何实现虚拟机的执行过程等。

文章首先介绍了虚拟机的概念和作用。虚拟机是一种程序,可以模拟计算机的行为,执行机器语言程序。虚拟机可以提供一个标准的平台,使得程序可以在不同的计算机架构上运行。虚拟机还可以提供安全性和隔离性,使得程序可以在沙盒环境中运行。

然后,文章详细讲解了如何编写一个虚拟机。首先,需要定义虚拟机的指令集。指令集是虚拟机可以执行的指令的集合。文章介绍了一个名为 LC-3 的指令集,LC-3 是一种教育用计算机架构,常用于大学计算机科学课程。

其次,需要实现虚拟机的执行过程。执行过程包括取指令、解码指令、执行指令等步骤。文章详细讲解了如何实现这些步骤,包括如何定义虚拟机的寄存器、如何实现指令的执行等。

最后,文章介绍了如何加载程序到虚拟机中执行。程序可以通过文件加载到虚拟机中,虚拟机可以执行程序并输出结果。

总的来说,本文是一篇关于如何编写自己的虚拟机的教程,详细讲解了虚拟机的概念、指令集的定义、执行过程的实现等内容。


HN 热度 317 points | 评论 83 comments | 作者:sebg | 1 day ago #

https://news.ycombinator.com/item?id=42517164

  • 设计一个简单的 CPU 指令集和虚拟机可以帮助理解计算机的原理
  • 了解计算机的原理可以帮助理解指针和数据结构
  • 指针并不是很难理解,C 语言的指针语法才是真正的难点
  • 内存分段可以提高操作系统的安全性,但现代操作系统已经不再使用这个特性
  • 设计一个虚拟机可以帮助理解计算机的原理和提高安全性
  • 使用 RISC-V 指令集可以更容易地理解虚拟机和操作系统
  • 设计一个虚拟机可以帮助理解计算机的原理和提高安全性

Quiver: A Modern Commutative Diagram Editor #

https://github.com/varkor/quiver

quiver 是一个现代化的、图形化的编辑器,用于创建交换图和粘贴图,能够渲染高质量的图形用于屏幕查看,并通过 tikz-cd 导出到 LaTeX。使用 quiver 创建和修改图形比手写 LaTeX 快几个数量级,甚至可以与手写笔记竞争。

quiver 的特点包括:

  • 高效、直观的界面,用于创建复杂的交换图和粘贴图
  • 灵活的网格系统,根据标签大小调整网格大小
  • 可组合的箭头样式
  • 支持颜色标签和箭头
  • 支持导出 LaTeX 图形,并嵌入链接以便于修改或分享

其他特点包括:

  • 多选功能,方便批量修改
  • 历史系统,支持撤销和重做操作
  • 支持自定义宏定义,通过 URL 导入宏文件
  • 支持导出可嵌入的 HTML 图形
  • 支持缩放和平移,适用于大型图形
  • 智能标签对齐和边缘偏移

quiver 还支持编辑器集成,详见 quiver wiki。要构建 quiver,需要运行 make 命令,然后在浏览器中打开 src/index.html 文件。如果构建失败,可以手动下载 KaTeX 并将其放置在 src/ 目录下。quiver 必须通过 localhost 运行,可以使用 Python 启动一个简单的 HTTP 服务器。


HN 热度 310 points | 评论 35 comments | 作者:peterkos | 19 hours ago #

https://news.ycombinator.com/item?id=42520151

  • 这个工具很棒,我用它生成了一个 Fourier-Poisson 立方体,只用了 10 分钟,用户界面非常直观。
  • Quiver 的设计非常出色,专注于交换图,而不是自由形式的画布,这使得它保持干净和易用。
  • Kammler 的《傅里叶分析入门》一书中有一个相关的参考资料。
  • Petri 网络很酷,它们有点像有限状态机,可以多线程。
  • Statebox 是一个组织,他们对 Petri 网络和交换图(以及其他范畴理论概念)很感兴趣。
  • Quiver 不仅仅是一个绘制交换图的工具,而是一个绘制任何标记的节点和边/箭头系统的工具。
  • 交换图只是一个节点和有向边的集合,但它是一个有向图,沿着图中任何两个起点和终点相同的路径被认为是等价的。
  • 交换图是快速可视化推理关于路径等价性的上下文中非常有用的工具。
  • Quiver 具有各种功能来控制和调整这些图表,使它们在视觉上令人愉悦。
  • LaTeX 中手动规划和编码这些图形曾经是数学家和逻辑学家的标准方法。

Lua is so underrated #

https://nflatrea.bearblog.dev/lua-is-so-underrated/

这个网页是一篇关于 Lua 编程语言的文章。作者认为 Lua 是一个被低估的语言,虽然它在游戏和嵌入式系统中很常用,但它的优点和能力并没有得到足够的认可。

文章首先介绍了 Lua 的设计和实现,认为它的代码简洁、性能高,易于理解和学习。作者还提到了 Lua 的多范式支持,可以进行命令式、函数式和面向对象的编程。

但是,作者也指出了一些 Lua 的局限性,例如索引惯例、错误处理和 nil 终止数组。这些特点可能会让一些开发者感到困惑。

总的来说,这篇文章是对 Lua 编程语言的赞扬和介绍,希望更多的人能够认识到 Lua 的优点和能力。文章最后提到了 Lua 在 nvim 插件中的应用,证明了其高效性。


HN 热度 297 points | 评论 311 comments | 作者:nflatrea | 1 day ago #

https://news.ycombinator.com/item?id=42517102

  • Lua 语言设计的一些细节决定让人感到有些不舒服,但其性能、易于集成、占用空间小和可靠性使其仍然是许多场景下的首选。
  • Lua 的栈式 API 设计是为了实现更好的嵌入性和垃圾回收管理,尽管这可能会增加一些认知负担。
  • Lua 虚拟机最初是基于栈式设计,但后来转向了寄存器式设计,这使得指令编码更灵活,但底层仍然使用栈。
  • WebAssembly 是一种潜在的替代方案,允许用户使用任何语言编写插件,并在沙箱环境中运行,但其复杂性和构建难度可能限制了其在简单场景下的应用。
  • Lua 仍然是许多场景下的首选,尤其是在需要简单脚本和易于嵌入的场景中。
  • Terra 语言是 Lua 的一个扩展,提供了静态类型和手动内存管理,适合系统编程和高性能应用。

A Tour of WebAuthn #

https://www.imperialviolet.org/tourofwebauthn/tourofwebauthn.html

本书是关于使用公钥签名方案来构建更好的身份验证系统的。公钥签名方案有三个基本操作:生成、签名和验证。生成操作产生公钥和私钥,签名操作使用私钥对消息进行签名,验证操作使用公钥检查签名的有效性。

密码是脆弱的,因为它们容易被破解和泄露。使用公钥签名方案可以解决这些问题。用户注册时,计算机生成公钥和私钥,记录私钥并提交公钥和用户名给网站。登录时,用户输入用户名,计算机使用私钥对消息进行签名,发送用户名和签名给网站,网站使用公钥验证签名的有效性。

但是,这个方案还存在问题,例如钓鱼攻击和签名泄露。为了解决这些问题,我们需要对方案进行改进。首先,我们需要改变签名的消息,使其包含网站的网址,这样可以防止钓鱼攻击。其次,我们需要在签名消息中包含一个随机的挑战,这样可以防止签名泄露。

本书将详细介绍这些改进方案,并讨论如何使用公钥签名方案来构建更安全的身份验证系统。


HN 热度 281 points | 评论 139 comments | 作者:caust1c | 1 day ago #

https://news.ycombinator.com/item?id=42516800

  • WebAuthn 的注册过程中存在一些棘手的边缘情况,例如网络条件差导致创建的密钥无法到达服务器,导致密码管理器和服务器之间的状态不一致。
  • Chrome 浏览器已经实现了 Signals API 来解决这个问题。
  • WebAuthn 的设计存在问题,例如没有考虑到多个密钥同时插入的情况,导致需要使用 blink 所有密钥来解决这个问题。
  • WebAuthn 的标准已经演变了多个版本,导致用户可能会因为标准的变化而被锁定在旧版本中。
  • Discoverable 凭据并不是大多数场景下的技术要求,用户可以选择使用非 discoverable 凭据来避免被锁定在特定的生态系统中。
  • 服务提供商应该允许用户同时使用 discoverable 和非 discoverable 凭据来提高用户体验。
  • 闭系统的解决方案也存在问题,例如 Chrome 切换密码保存方式导致用户丢失账号访问权限。
  • 使用密码作为主要认证方式,辅以 passkey 或其他方式来提高便捷性,是一种可行的解决方案。
  • 上传公钥的方式可能比 passkey 更加安全和通用。
  • 不提供密码登录方式的服务可能会导致用户流失。

A Simple ELF #

https://4zm.org/2024/12/25/a-simple-elf.html

这个网页是一篇关于编程的文章,讨论了如何创建一个简单的 Linux 程序。文章开始时,作者使用 GCC 编译器编译了一个简单的 C 程序,输出了"Hello Simplicity!“的字符串。然后,作者使用 objdump 工具分析了编译后的程序,发现了许多符号和节(sections),包括.text 节、.data 节、.bss 节等。

作者指出,虽然程序看起来很简单,但实际上包含了很多复杂的东西,包括标准库函数、调试信息、错误处理机制等。作者决定逐步简化程序,去掉这些复杂的东西,以便更好地理解程序的工作原理。

文章接着讨论了程序的入口点(entry point),即_start 函数,而不是 main 函数。作者使用 objdump 工具分析了_start 函数的代码,发现它调用了 main 函数。

最后,作者开始简化程序,去掉了标准库函数,使用自定义的函数代替。作者还讨论了如何使用自定义的链接脚本(linker script)来控制程序的布局。

总的来说,这篇文章是一篇关于编程的技术文章,讨论了如何创建一个简单的 Linux 程序,如何分析和简化程序的结构,如何使用自定义的函数和链接脚本来控制程序的行为。


HN 热度 277 points | 评论 60 comments | 作者:signa11 | 1 day ago #

https://news.ycombinator.com/item?id=42516697

  • 作者使用手写的最小 ELF 头和汇编代码来实现从 C 代码生成最小的 ELF 文件
  • 作者使用 Linux Syscall Support 库来方便地从 C 代码中调用系统调用
  • 作者使用 Python 脚本来从正常的 ELF 文件中提取出手写的最小 ELF 文件
  • 有人认为可以使用 busybox 和 wolfssl 来减小代码大小
  • 有人认为可以使用内核 TLS 来减小代码大小
  • 有人认为自定义链接脚本是令人讨厌的,因为其语法复杂且容易出错
  • 有人认为可以使用-Wl,–orphan-handling=error 选项来避免链接脚本的问题
  • 有人推荐使用 nolibc 库来实现最小的 C 标准库
  • 有人认为 freestanding 环境指的是没有操作系统的环境
  • 有人认为可以使用-ffreestanding 标志来告诉编译器不要假设函数有标准的 C 定义
  • 有人推荐阅读其他相关文章和资源,例如 Teensy Files 和 A Magnetized Needle and a Steady Hand
  • 有人分享了自己实现的最小 ELF 文件和相关代码
  • 有人认为这种类型的文章很有趣,并推荐阅读其他相关内容