Landon Fuller writes technical posts on Mac OS X and iOS internals, security issues, crash reporting and Java on macOS.
HN commenters cite it for explanations of macOS behavior such as PT_DENY_ATTACH, the Java vulnerabilities and Objective-C runtime details.
> For Git, I just followed some examples I found online. I don't remember the exact procedure, but it didn't work. After around an hour of trying I just gave up. In fact, I found it just as difficult as trying to install Git on the OpenSolaris servers, which is saying quite a bit.
I installed git on a coworker's computer in a couple minutes today, so I don't know what to say.
> As for Java, I couldn't update despite using the Software Update menu. It worked on Windows, but OS X just hadn't gotten around to adding it. And, as is usually the case with Apple, there was no good way around it: since Apple hadn't update Java, I couldn't just install it myself. (Or, at least, there was no obvious way of doing this.)
It wasn't that Apple hadn't "added" it, there simply wasn't a port of that version of Java to Mac OS X, because they needed to port it. If someone external to Apple had produced a port (like, say, Sun), you could have installed it, exactly in the same way that we install Oracle Java today.
Someone did eventually produce a partial non-GUI port, and it later became the base of Oracle's officially supported Mac OS X Java: http://landonf.bikemonkey.org/static/soylatte/
This has little to do with Mac OS X being somehow broken, and a lot to do with the fact that Sun only provided Java binaries for Solaris, Linux and Windows.
For Java 7 on, Oracle will be supporting Java for Mac OS X directly.
> I don't know exactly what my friend tried to install AucTeX and the rest…
As long as you also pull in the dependencies specified in the podfile, you'll be absolutely fine just adding the class files to the project. I've tried to be careful to maintain that as a viable option. That you retain the option is one of the strengths of Cocoapods to my mind.
While far from perfect, I chose to use Cocoapods as it's becoming the defacto standard in the iOS community. I've used it in my apps, and have found it easier to manage my deps than a bunch of git submodules or copying source code into my projects.
The problems with static libraries on iOS have been well documented at [1]. Essentially, that you can't build static libraries as a third-party for iOS without resorting to low-level trickery. This seemed like it would become a maintenance burden vs. the Cocoapods approach.
[1]: http://landonf.bikemonkey.org/code/ios/Radar_15800975_iOS_Frameworks.20140112.html
You're assuming writable trampolines. objc_msgSend()'s trampoline works by caching the target lookup and having an extremely short fast-path in the case that the target method implementation is cached.
objc_msgSend is a trampoline in the sense that it leaves the frame/registers untouched and jumps straight to the target implementation.
That said, you can implement the kinds of trampolines you're referring to without writable code pages, it just requires more work: http://landonf.bikemonkey.org/2011/04/index.html
Hey, I am Andreas, one of the developers of HockeyApp.net. The service provides some pretty unique features especially advanced crash report management. Crash Reporting is based on PLCrashReporter (see http://landonf.bikemonkey.org/code/objc/Reliable_Crash_Reporting.20110912.html), works also in the App Store with full server side symbolication grouping all crashes by class, method and line number.
Let me know if you have any questions.
On the other hand, is there really any other? For years, Apple has been pretty much the sole provider, and had their very own JVM with specific look & feel customization to the UI packages. The only real alternative is Soylatte[0], which is fairly purpose-specific.
[0] http://landonf.bikemonkey.org/static/soylatte/
iOS actually doesn't have a restriction as strict as this: you can take a page of memory and map it again without issue. This is the technique used by imp_implementationWithBlock, and current versions of libffi can generate closures based on the technique.
http://landonf.bikemonkey.org/2011/04/index.html