码农早餐 · 2026-09-12
今日头菜:Shopify 从 React Native 迁回 Swift 和 Kotlin。另有 7 条快讯:Forgejo 16.0.4 修掉一个 RCE:模板仓库能反过来吃主机;JEP 544:把训练跑的 native code 存进 AOT cache;等。
Shopify 工程博客把移动端从 React Native 拉回 Swift 和 Kotlin,标题就一句 back to native,迁移规模和路线都没交代。跨端省下的那点人力,很可能又在桥接调试和平台差异里还回去了,你把它当默认选项前,得先有人能接住原生那一层。
Shopify 从 React Native 迁回 Swift 和 Kotlin
Shopify 正在把移动端从 React Native 迁回 Swift 和 Kotlin,官方工程博客给出的说法是「back to native」。原文只有这一句结论,没写迁移规模、时间表,也没交代是全面重写还是新功能回退原生。对写前端的人来说,值得先看清的是:跨端方案省下的那点人力,最后是不是又用调试原生桥接、追平台差异还回去了。React Native 不是不能用,但把它当默认选项之前,先想清楚你的团队有没有人能接住原生那一层。

来源:
Forgejo 16.0.4 修掉一个 RCE:模板仓库能反过来吃主机
Forgejo 发了 16.0.4,头一条安全修复标着 Critical:16.0.3 及以前的版本存在远程代码执行。触发路径不复杂——从模板仓库生成新仓库时,Forgejo 会先 clone 模板、删掉 .git 目录、对 .forgejo/template 里列出的文件做变量展开,然后重新 git init。问题就出在中间那步:变量展开可以被滥用,在目录里重新造出一个 .git 文件夹,等 git 初始化时顺手把它认下来。于是一个恶意模板仓库就能读 Forgejo 主机上的任意数据,还能在主机上执行任意进程。修法很朴素:变量展开做完之后,先清掉已存在的 .git,再初始化。
同一版还补了三个洞,值得一并看。一是 API 编辑仓库内容时的授权 reducer 没考虑 API 专属限制,带受限权限的 repo access token 能越权改动;二是组织团队被设成 admin 时,反而拿到了关联仓库的 owner 权限;三是只读用户(包括公开仓库的未登录访客)能通过 GetReleaseAttachment 接口和附件下载路由拿到 draft release 的元数据和完整附件内容——GetRelease 和 ListReleaseAttachments 本来都做了检查,就这两个入口漏了。官方注明这跟 Gitea 上游修的是同一类问题,对应 CVE-2026-27660 和 GHSA-q9pg-jj6x-j9p6。另外还顺手更新了 google.golang.org/grpc 到 v1.83.1、golang.org/x/crypto 到 v0.56.0,两个都标了 [SECURITY]。
自建 Git 服务的人对这类事应该不陌生:代码托管平台本身就是最值钱的那台机器,它手里有你的代码、CI 凭证、部署密钥。模板仓库这个功能平时用得少,恰恰容易被忽略——谁能往组织里推一个模板仓库,谁就可能顺着这条路摸到主机。所以别只盯着版本号,顺手查一遍谁有建仓库的权限。升级到 16.0.4 是最省事的做法;一时升不了,至少把模板仓库的来源收紧。至于「自建更安全」这句话,这次的漏洞提醒我们它有个前提:补丁得跟上,不然自建只是把风险从别人家搬到了自己家。
来源:
JEP 544:把训练跑的 native code 存进 AOT cache
JEP 544 想解决的是 Java 应用那个老毛病:启动慢、预热慢。HotSpot 跑一个应用要经过三个阶段——startup、warmup、peak performance。一开始靠字节码解释器慢慢跑,边跑边 profiling,先让 C1 编出「优化得比较克制」的 native code,等 profile 数据攒够了再交给 C2 编出高度优化的版本。这中间花掉的 CPU 和内存,本来是可以留给应用自己的。JEP 544 的做法是把这部分工作挪到一次 training run 里:在训练跑中把应用代码编译成 native code,存进 AOT cache,后续生产运行启动时直接可用。
关键约束得说清楚。这不是 AOT-only 模式,同一次运行里 AOT 代码和 JIT 代码并存,需要时自动切换,这个切换对应用不可见。不支持交叉编译——training run 编译出来的代码,必须在相同 CPU 架构、相同 feature set 上跑。目前支持 AArch64 和 x64,其他架构靠后续移植。不改应用、库、框架的代码,也不改 HotSpot 配置,只是请求使用 AOT cache;Serial、Parallel、G1、ZGC 四个收集器继续支持。工作流也不是新造的,是扩展现有的 AOT cache 创建流程。
官方给的对比是:静态编译启动即峰值、没有 warmup,但只能针对一组 hot spot 优化,换架构、换操作系统、换 JDK 版本都得重编,而且动态类加载、动态链接、动态分派、反射这些 Java 的看家本领它处理起来很吃力——所以静态编译器实现者普遍采用闭世界假设这类不兼容的约束,还要开发者提前标注哪些类可反射。JEP 544 走的是另一条路:AOT 拿启动和预热,JIT 拿 workload 变化后的持续峰值。如果你在维护启动时间敏感的服务,这个 JEP 值得跟进;但先确认你的目标架构在支持列表里,也别指望它省掉 profiling 这件事——它只是把 profiling 挪到了训练跑。原文没有给出具体的启动提速数字,也没有交代这个 JEP 目前处在哪个阶段。
来源:
RTK 号称省 token,实测成本账单却对不上
RTK 对外宣称能省 token,但有人拿成本 benchmark 去对,结论是省不下来。原文只有标题和一句摘要,具体测了哪些模型、省了多少、差在哪儿都没展开,所以别急着拿它当结论转发。对你有用的是这个动作本身:省 token 和省钱不是一回事,缓存命中、重试、上下文膨胀都能把账面数字吃掉。看到「省 token」的宣传,先问省的是哪一段的 token。
来源:
Cognition 发 SWE-2:Terminal-Bench 2.1 拿 92.8,但别急着信
Cognition 发了新模型 SWE-2,宣传口径是能跟 Fable 5.1、GPT-Astra 掰手腕,Terminal-Bench 2.1 上拿到 92.8。数字好看,但我第一反应是:这个 92.8 是在什么任务集上测的、评测环境跟真实仓库差多远。Terminal-Bench 这类 benchmark 考的是终端里连续操作的能力,跟你在一个几十万行的老项目里改一处 breaking change,中间隔着不少东西。模型能力上限由数据决定,不由宣传决定——先看它在你自己那套任务上跑成什么样,再谈换不换。
来源:
微软把 Rust 列进一级语言,原文只有标题
微软把 Rust 列为一级语言,这条来自 Rust 基金会官网的客座文章,原文只有标题,没有展开具体做法。对写代码的人来说,值得留意的是「一级」这个说法本身——它通常意味着工具链、内部支持、招聘口径会跟着动,但具体落到哪一层,报道没给。想判断值不值得跟进,先看它给的是资源还是口号。
来源:
一个网页就能冻住 Mac:Deathray 攻击
有人把「让 Mac 卡死」做成了一件很简单的事:打开一个不受信任的网页就够了。这篇标题叫 The Deathray 的文章就讲这个。原文只有标题,没给复现步骤,也没说影响哪些 macOS 版本,所以别急着照着试。但方向值得留意——浏览器里跑的东西,代价最后都落在你的机器上。写前端的人尤其该记住:页面能做的事越多,能被拿来干的事也越多。
来源:
OpenAI 数学证明风波升级:指控从抄袭转向训练数据来源
前几天我们聊过 OpenAI 那份数学证明被指抄袭、内部没人能复核的事。今天这条不是新事件,是同一桩争议往上翻了一层:指控从「成果抄了别人的」变成「训练数据来路不正」——有研究者说,OpenAI 用了他们未公开的对话来训练模型,然后对外宣称是突破。数学圈现在的诉求很直接:拿出证明,说明这些数学内容到底从哪来的。
为什么这一层比抄袭更重?抄袭争的是署名,数据来源争的是获取方式本身合不合规。前者是学术礼仪问题,后者是「你凭什么拿到这些东西」的问题。前者道歉撤稿还能收场,后者一旦坐实,牵动的是整条数据供应链的合法性。原文只有标题和几条社交平台链接,报道没展开具体是谁、涉及哪些对话,这些等有实据再说。但方向已经很清楚:模型能力的上限由数据决定,不由发布会的措辞决定。
来源:
你手头这个 App,是继续押 React Native,还是迁回原生?明早 8 点见。
本期从过去 24h 的 X / Hacker News / GitHub Trending 共 70 条信息中挑出 8 条(全天逐小时采写、经事实校对后于晨间选编)。内容由 LLM 辅助生成,每条均附原始来源链接,重要决策请交叉验证。

微信扫码关注「码农早餐」
每天早 8 点推送到微信,不用记网址。关注后回复「价格」,拿大模型价格与退役时间速查表。
喜欢这篇?订阅每日推送
每天 8:00 帮你挑好 AI 圈最重要的 5-10 条,说人话、看得懂、不浪费时间。
本页内容由 LLM 自动聚合 + 解读生成,每条均有原始来源链接,建议交叉验证。