Swift at Apple: Migrating the TrueType hinting interpreter (swift.org)

210 points by DASD 17 hours ago

jacquesgt 11 hours ago

If you want to help improve the security of OS software through the magic of memory safe languages, the team that did this work is hiring: https://jobs.apple.com/en-us/search?search=Spear&sort=releva...

Knowledge of Swift not required. If you know your way around OS software, can reason about the security of the code you write, and are excited about writing exhaustively tested software, we’d love to talk to you.

We’re hiring for roles in kernel/systems and userspace. Like the Platforms SOTU mentioned, we’re using Swift at all layers of the software stack now. https://www.youtube.com/live/yl2jsIoMfDU

I had the pleasure of leading the effort to ship Swift in the Secure Enclave back in 2022. Now I have multiple teams working on accelerating the transition to memory safe languages. We’re showing that with good planning and a relentless focus on testing, we can improve security, performance, and functionality. And we get to have a ton of fun working with some amazing colleagues. It’s the most enjoyable and impactful work I’ve ever done in my career.

byproxy 7 hours ago

Any resources you'd recommend for learning about reasoning about the security of code?

rinon 6 hours ago

For low-level system security, I'm a fan of https://llsoftsec.github.io/llsoftsecbook/LLSoftSecBook.pdf as an overview for any systems developer, not just compiler devs. It might not be the most approachable, but it's got great info on everything memory corruption.

KolmogorovComp 5 hours ago

> Operations like filter and map allocate memory, but that allocation is only necessary if the value escapes. The Swift standard library provides .lazy.map and .lazy.filter, but they don’t work in every case. For logic that only iterates over the filter or map, it’s much more efficient to loop with continue (or use for … in … where) and transform elements into local variables as necessary.

It does feel like a compiler/optimiser failure to have to rewrite those cases.

Altern4tiveAcc 3 hours ago

I've always wondered if JS engines could rewrite those array functions at compile time, like this: https://github.com/SomeRanDev/Haxe-MagicArrayTools

Though, it probably wouldn't work if user code modified the Array prototype.

comex 11 hours ago

Beware: As of a few months ago, when I tried to use the lifetime features shown off in this post, I ran into constant compiler crashes with very simple programs, until I gave up and wrote off the features as unusable. This happened on both stable and nightly compilers. I guess they work well enough for this TrueType interpreter, but I suspect they’re using a narrow subset of what the features are supposed to support. Or maybe things have been fixed very recently.

That said, I’m looking forward to using Swift lifetimes once they actually work!

stephencanon 11 hours ago

The work discussed in this post shipped in the OS last year (fall 2025), so nothing here is dependent on very recent changes.

monster_truck 3 hours ago

Average swift experience

pjmlp 16 hours ago

During the State of Platform keynote, on the subject of Swift adoption across macOS, several examples were given, not only TrueType engine.

RIS is happening across all OS levels, if the keynote is to be believed.

JimDabell an hour ago

Alexandre Colucci has published a series of articles analysing the use of Swift in iOS and macOS by Apple here:

https://blog.timac.org/categories/reverse-engineering/

And frequently discussed on Hacker News:

https://hn.algolia.com/?dateRange=all&page=0&prefix=false&qu...

MBCook 13 hours ago

They’ve been doing it for years. I don’t remember how we first knew, but I know they’ve been using Swift in kernels for at least some of the other chips like the Secure Enclave or whatever.

I’m not sure exactly which. I assume it’s some of the code and not all. But it’s not new in the abstract.

That said I don’t think I’ve heard of it in the kernel of MacOS on the main processor. That may be new.

Either way this is certainly the most concrete announcement I remember them ever giving on this stuff.

commandersaki 12 hours ago

I know internally they use an IPsec implementation written by Rust (I think in the iCloud infra). Heard this from an ex-Apple engineer Ben (forgot his last name) that did a wonderful presentation of Rust from first principles. He said that it was hard to get people in on Rust when most would argue for Swift.

Edit: This is the guy: https://rustcurious.com/course/

pjmlp 5 hours ago

Some stuff was discussed at Meet with Apple security event a few months ago, and the talks on FoundationDB rewrite, or why Swift Embedded subset came to be.

However I miss them actually having had one of those 15 - 30m WWDC sessions, where they could have gone a bit deeper into the keynote examples

DASD 16 hours ago

Curious the direction of Webkit as there was a nebulous mention of select portions being rewritten from C++ to Swift. And yet, the new ECMAScript module (ESM) loader for Safari 27 is implemented in C++ (https://webkit.org/blog/17967/news-from-wwdc26-webkit-in-saf...).

pjmlp 16 hours ago

No idea, maybe the private parts of the code, Safari isn't open source, or is coming later.

In any case I would have liked to have more info during the deep dive sessions.

As it is, Meet with Apple on security (a 5h long event) had much more information.

hirvi74 15 hours ago

What does RIS stand for?

gyomu 15 hours ago

Rewrite in Swift

willXare 14 hours ago

mrpippy 16 hours ago

The author discussed this a bit on Mastodon as well:

https://xoxo.zone/@numist/116716469017975106

numist 15 hours ago

I'm also here :)

atdt 12 hours ago

Excellent write-up!

numist 11 hours ago

saagarjha 16 hours ago

Interesting that this is published under the MIT, rather than Apple’s more favorite Apache 2, license

JumpCrisscross 16 hours ago

Why is it interesting?

drob518 16 hours ago

Presumably because MIT is even more permissive and it’s a change in Apple’s behavior.

favorited 14 hours ago

zdw 15 hours ago

yyyk 3 hours ago

"we used a fuzzer to minimize a corpus of 10 million PDF files down to 4,200 without any loss of code coverage"

Did they need a fuzzer for that? They could've render them all and see what's exercised?

thechao 2 hours ago

Its a set cover problem, and is NP-hard. 4100 of something probably runs nicely in your laptop in a reasonable amount of time.

weinzierl 16 hours ago

Back in 2023 there was talks about Microsoft rewriting the font stuff in Rust for similar reasons Apple is now doing the Swift move.

I'm not sure what became of it and if it ever shipped. If anyone knows I'd be curious.

DASD 15 hours ago

Russinovitch (Azure's CTO/CISO) gave a speech at RustConf 2025 and mentions it(DirectWriteCore) took 2 engineers 6 months resulting in 154K LOC and 5-15 percent performance increase for font shaping. https://www.youtube.com/watch?v=uDtMuS7BExE&list=PL2b0df3jKK...

ks2048 11 hours ago

So, hinting only takes place at low resolutions, I believe. How often is it used, eg viewing “typical” PDFs on “typical” screens?

airstrike 16 hours ago

As much as I enjoyed Swift, one can only wonder what the world would look like if they had gone with Rust as their default language instead.

AceJohnny2 14 hours ago

Rust doesn't have an ABI [1]. Swift needed one to be a useable application language:

https://faultlore.com/blah/swift-abi/ (written by a core Rust developer)

[1] apart from the basic/universal C one, which prevents exposing any useful Rust semantics over the interface

afavour 14 hours ago

One of the genius things about Swift is its interop with Objective C. Made the switch over considerably easier for developers. I’m not sure what that looks like in a Rust world.

Rust is also just a more complex language. I’m not convinced the benefits would have been worth it.

inkyoto 8 hours ago

Not just interoperability with Objective C but with C (full) and C++ (increasingly better but not full) as well.

Swift is also interoperable with different versions of itself courtesy of the Swift stable ABI (Application Binary Interface)[0], which they invested a significant amount of time into at the expense of adding other new features to the language, which have come along later.

Rust offers a different approach: recompile everything and static linking.

[0] https://faultlore.com/blah/swift-abi/

pjmlp 5 hours ago

jadengeller 15 hours ago

Modern Swift borrows a lot from Rust! And it also has its own benefits, both ergonomic and also supporting eg generic in dynamic libraries

airstrike 15 hours ago

These days I mainly write Rust but I did write a semi complex iOS app and enjoyed Swift. I just didn't love how slow the type checker was and how it got lost. I recall having to break things into smaller bits to help the compiler, and there were some oddities about the language.

The gap between the two languages is quite small, it just makes me wish Apple was also all-in on Rust

MBCook 13 hours ago

DenisChetwynd 15 hours ago

inkyoto 7 hours ago

ecshafer 15 hours ago

Swift and Rust were developed at similar times. I think of them more as having similar influences than borrowing from each other.

pohl 12 hours ago

pjmlp 6 hours ago

est31 15 hours ago

vardump 15 hours ago

Does it borrow borrow checker?

tialaramex 14 hours ago

anextio 14 hours ago

pjmlp 5 hours ago

Swift takes the right approach in language ergonomics, many of its use cases would be much harder with explicit .clone() all over the place, lack of back references, no standard ABI for binary libraries, interop with Objective-C and C++, no standard concurrency runtime, or error handling types.

Rust 2026 roadmap has language ergonomics on it for a reason.

That said, outside Apple ecosystem you probably better with Rust, or if one has no GC issues, OCaml, Haskell, F#, Scala, C#.

jounker 3 hours ago

Apple has a runtime system that looks a lot like smalltalk. Everything at that layer is dynamic. They needed a language that could seamlessly interact with that system.

raphlinus 15 hours ago

Welcome to the club of doing high performance text in a memory safe language!

masiulis 7 hours ago

There are dozens of us! Dozens!

Vello has been a big inspiration and source of knowledge for my own webgpu text renderer, thank you for that!

WalterGR 7 hours ago

> high performance text

Just strings or rendering strings?

If the latter, who are the other members of the club?

AndriyKunitsyn 14 hours ago

What's funny is from 2023 (I think), macOS just draws the UI unhinted. You have a 1080p display and you don't want to see the letters in the UI blurred to death? Tough luck, 1080p is incompatible with macOS, everybody needs "retina", and nobody cares that Windows and all Linux DEs look on 1080p just fine.

It looks like this hinter will be used only in rendering PDFs, because that's where they test the performance.

jacquesgt 11 hours ago

While hinting is disabled for most fonts, there are some fonts that require hinting to render correctly. We have to support hinting for those fonts, and it was easier to make it secure by rewriting hinting in Swift than it would have been to comprehensively identify every font created by those foundries.

nomel 14 hours ago

My last 1080p monitor was around 20 years ago. I have trouble comprehending people still use them regularly.

afavour 14 hours ago

A very quick search yielded Dell selling 1080p laptops today:

https://www.dell.com/en-us/shop/dell-laptops/dell-15-laptop/...

It is very, very common. Just not in the Mac world.

kbolino 14 hours ago

import 7 hours ago

AndriyKunitsyn 14 hours ago

People also use usable mice instead of touchpads, and they put the "ctrl" key where Apple thinks a useless "fn" should be. All kinds of things happen outside Apple world.

To me, it's more about what I'm used to. I have a perfectly fine several years-old monitor, so why should I throw it away?

yjftsjthsd-h 7 hours ago

Then let me blow your mind:) One of my daily drivers is an ex-Chromebook at 1366x768. Granted, it's also physically smallish so the DPI isn't quite as low as a macbook would be with those pixels, but still. And that's a touch cramped but it's fine.

incanus77 6 hours ago

mschuster91 13 hours ago

The problem is, as soon as you are not on a Mac but Linux or Windows, you are in for an awful, truly awful lot of pain. HiDPI support is a mess because even in the rare case applications are made with HiDPI in mind they are not tested on HiDPI machines.

Other way around, most Mac software is not tested how it behaves on inferior external monitors.

AndriyKunitsyn 11 hours ago

TazeTSchnitzel 14 hours ago

macOS has been drawing unhinted text for an eternity, and for those who can tolerate it on low-DPI screens, it's a great thing: the letter shapes look the same at all sizes, and the spacing between letters is consistent at all sizes.

bschwindHN 12 hours ago

I'm a high DPI snob so I haven't used a low res monitor for work in forever, but isn't the entire point of font hinting to make the text more legible at smaller pixel grid sizes? Yes, of course the shapes are more consistent since the hinter isn't touching them, but isn't the end result just less legible text?

kccqzy 11 hours ago

carlosjobim 38 minutes ago

Retina displays were introduced more than a decade ago. Why should Apple still support outdated technology after such a long time?

If you work with text and fine UI elements, do yourself a favour and get proper tools for the job. Get an ergonomic mouse and a good keyboard while you're at it. In every other field professionals use high quality tools to do their jobs, IT shouldn't be any different.

A plumber has equipment worth tens of thousands of dollars, while IT professionals think it's outrageous to pay a few hundred for equipment which is undeniably an improvement.

kbolino 14 hours ago

I had this problem on the first Apple Silicon Mac Mini in 2020 so it's at least a little older than 2023.

LoganDark 16 hours ago

I'm surprised the code has visible LLM smells. Though, I shouldn't be surprised. I hope the important bits are still human-controlled (and the same for Apple's many operating systems that absolutely deserve to remain stable and understood).

airspeedswift 16 hours ago

I assure you, every inch of the interpreter code has been stared at by humans, a lot. TBH even the assembly generated by it has.

ahartmetz an hour ago

All 150 kloc in six months by two people? Actually, it sounds like way too much code for the task unless 70+% of it is tests.

dgellow 16 hours ago

From what I got Apple is using claude code A LOT internally

Cassell 15 hours ago

It would be interesting to see their internal guidance on LLM use. It’s a massive amount of new power that has to be wielded carefully. That kind of guidance might mean the survival or downfall of some big corps in the next few years.

wahnfrieden 16 hours ago

Yes they are using Claude Code - not the Xcode agents.

It worries me. I hope Codex adoption picks up there.

andrekandre 12 hours ago

troupo 16 hours ago

I think these are the types of things Apple should've focused on instead of half-heartedly barging ahead with SwiftUI and breaking the language in the process

saagarjha 16 hours ago

I mean they’re doing both

wg0 15 hours ago

No mention of AI? Hand written code?

numist 14 hours ago

There's mention at the end. The models (and Swift itself!) have evolved a lot since this project started, so the early code is largely hand-rolled and the later changes were mostly authored by centaurs (to steal a term from chess).

But I personally reviewed every line that shipped and was absolutely insufferable about testing.