Vladimir Vukićević — Words
 



Finding the OS X Turbo Button

Some of you may have noticed that the Firefox 3 nightly builds have felt a lot snappier since a few weeks ago.  There’s an interesting story in that, one that I finally have time to write up.  We’ve had a number of bugs on the Mac where people were complaining of bad performance compared to Firefox 2, usually involving a test where a page was scrolled by a small step 100 or so times, and the time from start to finish was recorded.  In many of these tests, Fx3 was coming in at 50% to 500%+ slower.  This was odd, because in theory the graphics layer (which is what scrolling is mostly exercising) in Firefox 3 should be faster, given that it’s talking almost directly to Quartz.

I noticed a few odd things — if I disabled drawing of the native theme (used for the scrollbar), and if I tested just a tall page with a solid colored background and a scrollbar, I saw the same performance issues.  There’s a problem here, one that I initially blamed on the native theme drawing, because if I disabled native theme rendering, benchmark performance shot up, but there were still some inconsistencies.  I collected some numbers: for a given test, the minimum time that it can report is the number of iterations multiplied by the setTimeout delay used.  For example, with 200 iterations and a 50ms setTimeout, there’s no way that test can finish faster than 10,000ms.  The difference between that time and the time the test actually reports is the time spent doing interesting things.  By running my test for different timing values, I ended up with this graph:

20080228-timing.png

The horizontal axis is the setTimeout value, and the vertical axis is in milliseconds.  That plateau there?  That’s not supposed to be there.  Looking more closely at that number, it’s roughly 6500ms.  With 200 iterations, that’s 6500/200 = ~32.5ms per iteration.  So, per second, that gives us 1000/32.5 ~= 30.77.  We’re capping at 30.77 frames per second here.   That’s way too round of a number.  Even more suspicious, if I disabled native theme rendering, the test hit a plateau at around 3300ms, which ends up being 60fps.

It’s at this point that I start to get an idea of what’s going on.  I was aware of Beam Sync on OSX, but assumed that each app had to opt-in to it, given that it didn’t seem to affect Firefox 2.  Quartz Debug lets you disable Beam Sync on a global basis; I did that, and the benchmark numbers dropped — the line above kept nicely following the blue line down, and I was able to peg the fps needle in Quartz Debug over to the right.  So, we’re being throttled by the OS which is forcing us to wait for the next frame interval before allowing us to draw again.  This is a pretty serious problem, because at this point I thought that the only way to disable this was on a system-wide basis, which wouldn’t be acceptable.  Firefox 2 didn’t suffer from this, though, so I did some more digging.

Eventually I came to this tech note from Apple. The reason why Firefox 2 wasn’t affected was that Fx2 was not a Cocoa app; it is a Carbon app, and as such was exempt from being subject to coalesced updates.  The key thing showed up in the “last resort” section of that tech note: how to disable coalesced updates for an individual app!  This seems to be available available only on 10.4.4 or later, but that was fine; OS minor updates are free.  I verified that adding the plist entry fixed the problem for me locally, and checked this in to become part of the build.  See if you can spot when this change hit our performance testing infrastructure:

20080228-talos.png

Not bad for two lines of XML.

While figuring all this out, I noticed that Safari/WebKit didn’t seem to be affected by this framerate cap — the fps meter when Safari was running the same benchmark happily went up beyond 60fps.  After I found the plist entry, I checked Safari’s plist and was surprised to discover that they didn’t have this disabling in there.  Doing some more searching, I found this code in WebKit.  Apparently, there is a way to do this programatically, along with some other interesting things like enabling window update display throttling (though it’s unclear what that means!) — but only if you’re Apple.

All these WK* methods are undocumented, and they appear in binary blobs shipped along with the WebKit source (see the WebKitLibraries directory).  There are now over 100 private “OS-secrets-only-WebKit-knows” in the library, many of which are referred to in a mostly comment-free header file.  Reading the WebKit code is pretty interesting; there are all sorts of potentially useful Cocoa internals bits you can pick up, more easily on the Objective C side (e.g. search for “AppKitSecretsIKnow” in the code), but also in other areas as a pile of these WK* methods used in quite a few places.  Would any other apps like to take advantage of some of that functionality?  I’m pretty sure the answer there is yes, but they can’t.  It’s not even clear under what license libWebKitSystemInterface is provided, so that other apps can know if they can link to it.

Despite my frustrations with Linux, this type of hiding isn’t really possible in a real open source environment.  In the end, I really do hope that Linux can rise to the technical challenge and compete in desktop performance and features, but it’s not there yet.  However, I’m glad that there was a workaround for this issue for us on OSX, because the performance benefits are huge –  Firefox 3 on the Mac (everywhere, really) is going to be a kick-ass release!

Edit: Slashdot seems to have picked up on this, and in typical style, has completely misunderstood the post.  To be clear, I do not think that Apple is in any way trying to purposely “cripple” non-Apple software.  I also do not think that undocumented APIs give Safari any kind of “significant performance advantage” (as Firefox 3 should show!).  However, as I said, the undocumented functionality could be useful for Firefox and other apps to implement things in an simpler (and potentially more efficient) manner.  I don’t think this is malicious, it’s just an unfortunate cutting of corners that is way too easy for a company that’s not fully open to do.


134 Comments to “Finding the OS X Turbo Button”  

  1. 1 cris

    May I say, Apple ruins everything? Its corporation greed just isn’t compatible with OSS. webkit project should come clean and let its contributers know and decide if they want to stay under the roof of apple.

  2. 2 Kalle

    Yes, I know that this is off-topic … but there are so many nice graphs on these pages. May I ask what program you use to create them?

  3. 3 vladimir

    The first graph was from Google Spreadsheets; the second graph is from a test graphing tool we have at http://graphs.mozilla.org/g2/.

  4. 4 Darren

    Excellent find! Now if only Firefox 3 had better AppleScript support!

    It is worse than FF2. Below works in FF2, but not in FF3.

    tell application “Firefox”
    set Link to «class curl» of window 1 –gets URL of current page
    set tTitle to «class pTit» of window 1 –gets title of current page
    end tell

    Reworked, you can get it to work maybe once but then it breaks.

    tell application “Firefox”
    set Link to get «class curl» of window 1 –gets URL of current page
    set tTitle to get «class pTit» of window 1 –gets title of current page
    end tell

    The title never works, btw. Getting properties of the front window shows these properties are there, but you can’t get them. And getting properties of the front window works one minute, breaks the next for no apparent reason. Suddenly Firefox decides not to allow AppleScript access to its information.

    Sorry to drop this here, but there seems to be little to no effort that I can find to do much about this (in the forums and bug reports).

    I look forward to the speed improvements, though. I like the look and feel so far.

  5. 5 Robert Accettura

    Awesome work.

    Good point about Apple’s use of undocumented interfaces. I think that’s really worth emphasizing. It doesn’t contain the usual licensing block on top. Is it even possible to build WebKit without? Or is it required on Mac OS X?

  6. 6 vladimir

    @Robert: It’s not possible to build WebKit on OS X without, as best as I can tell.

    @Darren: As for AppleScript support, I’m not really sure — it’s never been a priority, unfortunately. I think that what’s really needed here is something like ‘tell application Firefox execute JavaScript ‘document.title’ end tell’ or something, and just execute arbitrary javascript that way. However, please file a bug on this in bugzilla.mozilla.org just so that we can track it, if there isn’t one there.

  7. 7 Darren

    Thanks for the quick response, Vladimir.

    I will file a bug report …

    It would seem that Firefox should *at minimum* retain what little AppleScript it has. And the JavaScript support would also be great.

    I cannot find (and do not know how myself) any info on getting that information “document.title” or “document.url” in Firefox via the Terminal. If so, I believe AppleScript could do a simple “do shell script” command.

  8. 8 cris

    Hi, Just some more questions :)

    when should I expect the impact of this fix? will it make it into beta 4? or some nightly in next week or two?

    and what type of performance boost should I expect? javacript? page loading? app responive-ness?

    Thanks! keep up the good work!

    cris

  9. 9 kL

    Using private APIs is very nasty Microsoftish thing indeed :(

    However the throttling doesn’t seem to be a bad idea — at certain point FPS is good enough, sync avoids shearing effect and you don’t waste 100% CPU or extra baterry power for (too) smooth scrolling.

  10. 10 martin

    Unfortunately Linux as such wont really make a difference. There will always be some awkward things that wont work, and the distributions will battle each other more than agreeing on something. Also, let’s not forget that Xorg as such is too messed up. Or they lack manpower. Either way, the whole GUI section will always be sup-perfect although personally I think Qt4 comes rather close these days on what *should* be possible. I think the X protocol needs to go away, it simply does not scale at all anymore, and the modularization hasn’t attracted more developers but instead annoyed users who previously had no trouble to compile the monolithic build, yet nowadays run into problems more casually and are unable to find helpful docu on the official xorg web site. It is a joke that Gentoo wikis have better docu on xorg than the official xorg docu….

    The distributions are very fragmented, and the better ideas like in Gobolinux or Slax are rarely taken up by other developers (users come in “cheap” but development power, and good ideas of people that can implement it, are rare. This is not so much valid for Slax, because Tomas always was mostly a one-dev guy, even though he relies on other people – but it is very valid for Gobolinux, because for so many ideas you could need more people chiming in with help, and while this works ok, it could simply be a lot better. It seems people do not understand that good ideas need momentum to really break through a barrier of legacy)

    That being said, the firefox build way is not nice, insofar that it relies on a .mozconfig file.

    Typically compilation should stay easy, sensible defaults should be made / assumed, the rest can be modified with –options like –prefix or –enable.

    And I agree about the part on MacOS and hidden blobs

  11. 11 vladimir

    @cris: This fix is currently in the nightlies and will be in beta4. It’s hard to characterize the performance boost, but it should be visible across the board, especially compared to previous Firefox 3 betas. Without this fix, Firefox was essentially spending much of its time waiting to be allowed to draw, instead of being able to do other processing.

  12. 12 Well

    This is just what Microsoft did before they were forced to stop. This is even worse than having a private protocol, because these are performance features that can make a huge difference.

  13. 13 David Hyatt

    The programmatic disabling of coalesced updates should not be public API. It’s actually a very dangerous thing to do. We aren’t really happy with that code in WebKit, but we had to do it to avoid performance regressions in apps that embedded WebKit. Technically it’s wrong though, since we turn off the coalesced updates for any app that uses WebKit! This includes drawing they do that doesn’t even use WebKit.

    As for the window display throttling, that was a pref designed for Safari (that we don’t even use any more). It’s not private or magic. It’s nothing more than a pref that we can examine from Safari-land, so linking to that is just silly. ;)

    Many of the private methods that WebKit uses are private for a reason. Either they expose internal structures that can’t be depended on, or they are part of something inside a framework that may not be fully formed. WebKit subclasses several private NSView methods for example, and it cost us many many man hours to deal with the regressions caused by the internal changes that were made to NSViews in Leopard.

    As you yourself blogged, there was a totally acceptable public way of doing what you needed to do.

    For any private methods we use that we think should be public, we (the WebKit team) file bugs on the appropriate system components. Many of these methods have become public over time (CG stuff in Leopard for example). Be careful when you dig into WebKit code, since we may continue to use the WK method even though it’s not public API just because we need to work on Tiger.

  14. 14 Mick

    “Despite my frustrations with Linux, this type of hiding isn’t really possible in a real open source environment. In the end, I really do hope that Linux can rise to the technical challenge and compete in desktop performance and features, but it’s not there yet.”

    Xorg does show some problems with its performance, but you are seriously mistaken if you think Linux doesn’t compete on features. Example: Spaces on OSX? Linux has had that for at least a decade.

  15. 15 vladimir

    Hyatt, yep, I’m not happy about having to disable coalesced updates either — we won’t be able to enable them until we implement roc’s Compositor design (which is on deck as a priority thing for Moz2), at which point we’ll have a lot more control over when we update our window contents since we’ll be able to pick a target framerate and stick to it. For this case, there is a public way of doing what we needed to do, and it works well.

    The window display throttling looked interesting because it seemed to mirror the effect that I was seeing in Fx2 (where it seemed to be drawing with no delay, but the updates weren’t at the same rate). The implementation of _webkit_enableWindowDisplayThrottle was public, but it did things like override NSWindow’s _postWindowDisplayUpdate selector — I’m not sure how anyone was supposed to know what sending that to a NSWindow does, much less what you can do if you override it.

    I’m glad that you guys are filing bugs to get this stuff opened up, so hopefully you can look at this as added pressure on those teams to do so. I understand that there are issues with regressions, and that in practice it’s hard to document those methods and mark them as unsupported/subject to change, because someone will invariably use them and then complain when they break in the future. However, you should be able to take a hard stance against that given the documentation — right now, someone has much more reason to complain when they use something undocumented that changes in the future, vs. using something that’s explicitly documented to be subject to change!

  16. 16 Robert O'Callahan

    > For this case, there is a public way of doing what we needed to do, and it works well.

    It actually doesn’t work all that well because all our embedders (Prism, Songbird, etc) have to add this option to their plists. If they forget, they’ll just mysteriously get crappy performance.

  17. 17 Mr eel

    Sounds like you got the wrong end of the stick there mate.

    What? No conspiracy after all?

  18. 18 Tom

    @Darren: Wish I had a way to contact you, but this is what you’re looking for:
    https://bugzilla.mozilla.org/show_bug.cgi?id=125419

  19. 19 Adam Ierymenko

    I wonder if the undocumented stuff in OSX is undocumented for another reason besides a “we want our stuff to be faster” reason: maybe those APIs are not “solid” yet and so they don’t want outside programmers using them. I’ve done this myself in my own code– hidden or undocumented parts of APIs that were squishy to prevent outside people from relying on things that might change out from under them.

  20. 20 Maciej Stachowiak

    Vlad, if there’s particular private APIs used be WebKit (or for that matter even ones not used by WebKit) that you need for Mozilla, please file at and let me know the bug number, I’ll make sure it gets some visibility. Having a third-party developer request helps us make the case that more of these things should be public API.

  21. 21 Dwight Silverman

    Vladimir,

    I’m no programmer, but I’ve seen something else in the MacBook Air that gives me pause. Don’t know if this qualifies as an undocumented API or not.

    Apple has touted that the MacBook Air’s new touchpad allows for multitouch gestures. One of them is the use of a three-finger side-to-side swipe to generate a back-and-forward call in an application, such as moving backward and forward in a Web browser.

    This feature works in Safari. If you do a three-finger swipe to the left in Safari on the Air, you’ll go to the previous page; a right swipes moves forward in the page queue. But these don’t work in Firefox (or Camino).

    Is this an “undocumented API”? Or has Apple provided Mozilla with the info needed to implement this in Firefox?

    Thanks.

  22. 22 Kosh

    In general, it’s not wholly unreasonable for an OS vendor (or indeed any software stack vendor in any subsector) to leave internal interfaces undocumented. There are plenty of these in Solaris, for example. A programmer’s reasoning is usually that the interface in question is partly formed, or liable to future change, or insufficiently abstract or general to set in the stone of documentation.

    People are much too quick to ascribe such things to malice rather than expediency or misjudgement.

    Nonetheless, this kind of expose is useful in encouraging vendors to nail things down. So don’t stop doing it ;)

    - K

  23. 23 JeffDM

    I know this is offtopic, but I think I need to ask. Has anyone on your team tested any version Firefox on any Tiger Mac with more than 4GB of RAM? It doesn’t seem to matter what version of Firefox, but it starts to bug out after a few days on a Mac with big RAM. FF1.5, 2.0 and 3b3 all eventually stall out such that FF needs to be restarted, it wouldn’t load new pages anymore. Even Flock has the same problem. Next time it comes up I’ll fire up the console to see if anything comes up. I suppose there are proper channels, I’ll hit them next time I see the problem, hopefully I’ll have something then.

  24. 24 Donovanr

    Don’t people realize that Apple markets its products with an unwritten slogan of “Stick it to the man” when, in fact, Steve Jobs is the man?
    Operationally Apple and Microsoft are basically identical. Two peas in a pod. They are just slightly different colored peas. Most of the real differences are in their marketing departments. Microsoft markets to business and Apple markets to artists so each has built an entirely different brand.

  25. 25 cris

    , as I understand, its very difficult for 3rd party developers to guess what they should ask for public API, since they probably have no idea what is available. Its in apple’s responsibility, to offer 3rd party developers as much help as possible to produce best product for mac users.

    If webkit’s involvement with OSX is so deep, and webkit developers have so little control, maybe they should just move out of apple’s control.

  26. 26 Hub

    September 2005 I posted this: http://www.figuiere.net/hub/blog/?2005/09/14/291-hidden-api-for-macos-x

    By reading the comment above, I guess it hasn’t changed much at Apple.

  27. 27 Stephanie

    Mick,

    “Xorg does show some problems with its performance, but you are seriously mistaken if you think Linux doesn’t compete on features. Example: Spaces on OSX? Linux has had that for at least a decade.”

    I know, I have used linux for about 8 years, and I’m about to go back into the Mac world on Saturday when I get a used Mac from a friend. HOWEVER, have you considered the fact that you cannot legally play DVD’s on linux distros because of the codec issues? Sure, you can put it in there and hack it, but if some gov’t employee was shopping at Frye’s Electronics and saw a linux box playing back an encrypted DVD like it would on a Mac or Windows box and understood what that meant, those computers would probably be confiscated on piracy issues. That, I can’t have in my world. To this freaking day, I can’t get a linux DVD or media player like mplayer or kaffeine to play a DVD properly, especially like School of Rock (causes Kaffeine to crash) or Stargate SG-1 Series (says I don’t have enough permissions or some such bull). If you cannot get multimedia to function out of the box, why bother? I have been out of the tech field for 4 years and have too many other things to deal with, to deal with becoming a programmer so that I can have a linux box with the same functionality like that of a Mac or Windows box. This is what’s going to kill linux on the desktop, and my opinion, already has. For a user who just wants a functional box, why bother with linux when you have the Mac? I think linux should remain a server-side OS, what it was in the beginning. I’ll study enough to take full advantage of my Mac, keep it up-to-date, and secure it.

    Good luck to those in the linux world!

  28. 28 alan turnate

    mactards… such nay-sayers. the peeps whom describe the floss *nix crowd as never going to be able to produce a competitive desktop should be aware of the apple cool-aide they devour (a close relation to microserf’s fud).
    look into just how os x was developed to understand what an impact the floss dev community provided so mactards didn’t have to learn to use computers, read nor spot a con Jobs.

    have a nice day. :)

  29. 29 Rosyna

    So just simply call CGSSetConnectionProperty(_CGSDefaultConnection(), CFSTR(“DisableDeferredUpdates”), kCFBooleanTrue);

    No big whoop. I don’t see what all the fuss is about.

  30. 30 JJMacey

    Hi All,

    I’m anchored in Linux, and it is fun to read all about this M$, Apple stuff.

    So what should you do today? LOL!

    Hey, I do what I do, free and open source, then do Web Sites, Forums, Blogs.

    Why pay the money for all this nonsense?

    Regards,

    JJMacey
    Phoenix, Arizona
    Live Linux, or Die!

  31. 31 Adrian

    Considering how wrong /. was with their article, it would probably be a good idea to move your updated paragraph from the bottom to the top, perhaps with a bold “Update:” ?

  32. 32 Stephanie

    Alan,

    You’re an idiot for not reading THOROUGHLY what I said. I left the tech world a few years back, and I DO NOT have time to do full professional-level programming to get multimedia working. I do a helluva lot more than you do in my world. Got gold? Got weapons and ammunition? Do you even know what’s going on out there with the US Dollar? Do you know the magnitude of the derivatives meltdown that is coming, especially with commercial real estate tanking later this year? Do you know about any of this and how that will affect YOU? Do you even have any social skills? What are you doing calling people names without knowing their life situation?

    Alan, Rosyna, JJMacey, grow the hell up. You’re not being smart by showing me that you know how to read code. That’s showboating. I know you’re trying to be idealistic with linux, but it’s clear to me that you haven’t even examined how to get around the legal issues regarding DVD codecs, LEGALLY. You’ll never sell a linux desktop to me for as long DVD’s can’t be played back on them straight out of the box. Get the hell off server-side stuff and focus on desktop environments for the average user, or stay on server-side stuff and STAY THERE!

    Bye, suckers!

  33. 33 Adam

    @JeffDM: I noticed this with FF3b3 myself but just figured it was the build. I do not have greater than 4GB (I have 4GB) and after a variable amount of time FF basically just stops working. No new pages will load. It wasn’t using a lot of memory either.

  34. 34 Alex

    Looks like a lack of documentation in ways. It’s documented for Java!

    http://developer.apple.com/cgi-bin/search.pl?q=“deferred drawing updates”&num=10&site=default_collection

    What did Apple say when you asked them?

  35. 35 Chris

    Stephanie,

    Cyberlink’s PowerDVD has been available for Linux since 2001, see the link below. CSS was a trade secret and not patented so the only potential legal issue is in the US and it is up to interpretation of the DMCA. But regardless xine or (totem with xine backend on Gnome) with libdvdcss plays DVDs on Linux properly (and has done so for many years), I don’t know about mplayer or KDE’s kaffeine support for DVDs since I don’t use either of them.

    http://www.cyberlink.com/eng/press_room/view_239.html

  36. 36 Dana

    Thanks for the insight and the hard work. I sure did notice the improvement and I am using the nightly as my main browser now (after getting ABP to work) <- that alone speeds things up tremendously.

  37. 37 Steve

    Stephanie,

    There is legal DVD playback available out of the box on preinstalled Linux PCs today. You can go and buy a Ubuntu PC from Dell if you like. It comes with LinDVD.

    http://linux.about.com/b/2007/12/20/dell-ships-pcs-with-ubuntu-710-and-lindvd-player.htm

  38. 38 Peter

    Stephanie, do you even know who Rosyna is?

    So much anger…

  39. 39 nich

    I can’t believe this was slashdotted. Maybe I should post that certain spiders are poisonous but do not document this fact.

  40. 40 chibimagic

    How is this evil if it doesn’t affect Fx2? Evil would be if they intentionally throttled Fx2 and Fx3, or throttled Fx3 after its release. But Fx3 is still in development, and this sounds like you’re just complaining because the first set of code you tried wasn’t the optimal solution.

  41. 41 Mars

    This is not a conspiracy. It’s the publishing of a public API to a very complex framework.

    Private methods aren’t shameful, there a necessary facet of object-oriented software.

  42. 42 Walt French

    I have seen lousy scrolling in Safari: part of the text is written over the part just a half line or a line-and-a-half or whatever. It persists until I scroll the munged text offscreen; when I scroll it back on, it’s fine.

    This seems like the reason why such APIs would be undocumented: they really don’t work right, and Apple thinks they _should_ work eventually but for now, you can cause problems if something else is running some related functions or whatever.

    So Apple takes the opinion that you don’t _need_ to waste your time dealing with buggy functions, and they don’t _want_ to take bug reports etc., and Safari is maybe critical enough to them that they’ll deal with it.

    Yes, MSFT used this trick to kill competition for Word, Excel and etc., tho the DOJ never seemed to quite understand that they only needed the _suggestion_ of secret APIs for the InfoWhirleds et al to favor the MS programs in reviews. Fortunately, Firefox, much as it may want market share etc., is not in the same position as Borland’s Quattro or Lotus’s Symphony.

    In fact, if monopoly power of the OSX platform were an issue, I’d be storming the barricades with you. As it is, I think one might question Apple’s development program but actually prefer an environment where bleeding edge stuff gets very limited exposure to the real world.

  43. 43 Brazilian

    Yes, if you can not it better, start blame somebody. This time OSX. But you know, on Linux there are no much browsers, so the only target to blame is actually KDE with its KHTML engine.

    Or lynx.

  44. 44 Tristan
  45. 45 aa

    They use APIs that initially only Apple has access to and then on their website they put cute bars showing how fast Safari is. When Microsoft does things like that, they pay billlions in penalties!

  46. 46 frank

    firefox 3 rcks, thank u very much
    i am buying a lot of t-shirts from u guys

  47. 47 Greg K.

    Core is already eminently scriptable. The key is in bridging XPConnect and OS X’s built-in language-independent OSA. Bug 61356 is about this, and Fraser briefly experimented with it (see comment 8 on the bug; I won’t quote it here since it’s not really on topic).

  48. 48 mungler

    interesting piece. shame slashdot have completely misunderstood the point.

    Apple *always* use their latest-developed stuff internally first, then make it available for public consumption. See ‘PrivateFrameworks’ vs ‘Frameworks’ in the /System/Library directory. This isnt some anti-competitive thing, they simply use this code internally first to make sure its stable and bug-free before they open it up for public use.

    IMHO, a very responsible attitude, frankly. There are always bleeding-edge developers who find and exploit this stuff for their own uses, and the unspoken understanding is that if you use unsupported functions, you support them yourself. If you use public ones, apple will field bug reports.

  49. 49 renan_S2

    “but if some gov’t employee was shopping at Frye’s Electronics and saw a linux box playing back an encrypted DVD like it would on a Mac or Windows box and understood what that meant, those computers would probably be confiscated on piracy issues.”

    Show me ONE machine which was “confiscated on piracy issues” for running libdvdcss.

    “to deal with becoming a programmer so that I can have a linux box with the same functionality like that of a Mac or Windows box.”

    I am not a programmer and I have a Linux box “with the same functionality like that of a Mac or Windows box”

    “but it’s clear to me that you haven’t even examined how to get around the legal issues regarding DVD codecs, LEGALLY. ”

    Since you seem to be a paranoid about “legal issues” of questionable existence, move to anywhere outside the USA, then it shouldn’t be a problem anymore. :)

    Stephanie, instead of blaming Linux, why don’t you LEARN TO USE IT?

  50. 50 James

    I wonder how Apple have avoided anti-trust suits for this long? Closed software, buying up competitors to restrict the market, dodgy selling practices. Sound familiar? :)

  51. 51 Martin Pilkington

    @Stephanie: Rosyna was actually replying to the original post, not your Linux post.

    @Alan: “look into just how os x was developed to understand what an impact the floss dev community provided so mactards didn’t have to learn to use computers”.

    Linux is technically very impressive. But while many linux users know computer science theory pretty well, they know less of software engineering and next to nothing on HCI. Your attitude is exactly why Linux will never become a notable force in the desktop OS market. When you treat everyone who wants an easy to use GUI as dumb then those people are going to go to Windows or Mac OS X where they aren’t treated like that. An OS should fade into the background so that users can use the applications. Unlike Linux users, Mac and Windows users definition of “getting work done” doesn’t involve for playing with config files.

    @kL: Private APIs are private 99% of the time because they aren’t yet developed. A huge number of applications that break between releases of OS X are those that use private APIs. Some APIs are taken from applications and then put into private frameworks while they iron out the creases. Then they release them as a public API. Sometimes they release them in on OS so that they can test them with their own applications before making it public (eg CoreText which was private on 10.4 but now public on 10.5)

  52. 52 Ilgaz

    I am very resistant to use a browser which its community seems to call my platform (which is Unix 03 certified) and me “Mactard” or “beige box idiot” in some extreme cases.

    Should Apple Inc. be responsible for fixing it too?

  53. 53 anonymous

    Stephanie:

    Perhaps you didn’t notice, but Windows XP does not support playing DVDs out of the box. It doesn’t come with the required codecs. It sold pretty well regardless

    Of course iit helps that any DVD player comes with a player which adds the codecs to the system, so Windows Media Player can play DVDs.

  54. 54 Kristleifur

    “Without this fix, Firefox was essentially spending much of its time waiting to be allowed to draw, instead of being able to do other processing.”
    – Vladimir

    I assume that Firefox developers attempted to decouple the general processing from the drawing routines. Was this somehow not possible?

  55. 55 cris

    let me repeat what I said at asa’s blog

    you guys can call this action from apple “normal”, but reality is its NOT fair.

    and Open source isn’t just open when it sees “fit”. Webkit sure can just remove its OS hat if they like to involve with apple and hiding from public, or remove itself from apple’s control

  56. 56 alan turnate

    Stephanie,

    I read what you read, and you fail to understand. All it takes is five minutes of reading to get almost everything running in *nix.
    As for the rest of your diatribe, I am sure I know alot more than just the things you assume I don’t.

    You on the other hand seem to be wrapped up in your US-centric subprime world, with little social skills yourself.

    There is nothing idealistic about my use of an operating system, I run a myriad of hardware, OS and software. I just happen to like *nix, primarily due to the stabilty and the fact I can change what the vendor assumes to be “the right way” for the masses to work with. As you rightly guessed, I am not the unwashed masses, nor as you seem to be, a tool user.

    My grandmother uses debian, my parents use ubuntu, my nephews, nieces and cousins use many flavours of *nix, none of these people even touch code. My grandma will be willing to point you at the site that got her to switch from windows. Alas, my siblings are staunchly stuck in windows/mactard heaven – they sound like you when they discuss the reasons.

    Anyways, I don’t need to grow up, your not my real mom.

    Alan.

    have a nice day. :)

  57. 57 shywolf9982

    @Martin

    “they know less of software engineering and next to nothing on HCI”

    Not so true. I know people that have used nothing but Macs and they felt very easy in using GNOME.
    KDE still suffers a bit of “settings mess” despite being potentially superior, especially when version 4 will come out, FOR REAL. And yes, I know they fucked up with that way-too-early release.
    Regarding codecs, Fedora has a new system that, whenever you try to play some multimedia file whose codecs are patented, allows you to purchase said codec “on the fly” for a reasonable price in order to play the file.

    And the main problem of Linux is, indeed, the kernel. Go take a look at MINIX 3 (self-healing) or Coyotos (which aims to provide a mathematical-proved security system) to see truly technically impressive kernels.

    The point that Linux scores (as kernel) is the fact that it seemingly allows a lot of extensibility, easy tweaking, and a very dynamic developement.

    My last thought goes to x.org: it’ll hardly go away. Like Win32. Go ask any Vista developer why they can’t get rid of that, their answer holds for x.org. Hopefully it will slowly transform in a more rational system, that uses all the power that modern GPUs can offer.

  58. 58 JSG

    Apple is not a monopoly.
    Apple is not a monopoly.
    Apple is not a monopoly.
    Apple is not a monopoly.
    Apple is not a monopoly.
    Apple is not a monopoly.

    Continue repeating until you believe it.

  59. 59 The Wolfkin

    glad i actually read the article. Seems pretty insightful. Good luck to you guys. I’m a big fan of Firefox on Windows and if I can get an equivilant experience I may migrate to FF on Mac

  60. 60 RyanVM

    chibimagic: I’m going to give you the benefit of a doubt and assume you just missed what vlad said about why Fx2 didn’t have the problem and Fx3 did and you’re not just trolling: “The reason why Firefox 2 wasn’t affected was that Fx2 was not a Cocoa app; it is a Carbon app, and as such was exempt from being subject to coalesced updates.”

  61. 61 Wouter

    I find it pretty surprising this issue attracts so much attention from (supposedly) skilled software engineers writing a complex product like FF. You should know better than to flame the vendor for using undocumented API’s, it’s very common practice to keep bleeding-edge stuff to yourself until it’s properly tested and ready for deployment. Apple does it, MS does it, and most likely FF does it too (or is *everything* scriptable for extensions part of the public API *and* documented?). You *assume* Apple did use this in Safari to get them a competitive advantage, but you have no proof at all. Did Apple ever try to frustrate and hinder FF development (or any other browser, for that matter?). Does Apple directly earn money through Safari usage? Is Firefox or Opera or whatever a threat to their hardware and software sales? I don’t think so. I think you’re all just overreacting, and if I were you I’d contact Apple developers first to find out why these API’s are restricted. It would be pretty annoying if Apple decides to change/move around their *private* API’s in some future OSX update and break all FF3 installations, wouldn’t it?

    On a side note, I’d like to concur with Ilgaz on the childish ‘Mactards’ comments like Alan Turnate’s. As a professional *nix developer that works with OSX, Linux, Solaris, FreeBSD and HP-UX on a daily basis, and a home user of OSX and Linux I recognize nothing of the Apple ‘cool-aid’, fashion-statement, wannabe-trendy bullcrap that would qualify me as a ‘Mactard’. I know *nix and I know OSX, and I like both, but for day-to-day usage I like OSX best, just because it gives me all the power I need with the least headaches. Fanboy comments like Alan’s on a firefox developer blog doesn’t really make me want to try FF3. Which would be a shame, because I went from FF1.5 to FF2 and then switched to Safari on OSX because my user experience with FF2 was getting worse and worse over the 2.x versions, up to the point that I got fed up with it. I was hoping to go back to FF3 in time, but please concentrate on FF quality, not on flamewars which of the OS-es is better. Or at least pick the one OS that’s actually a lot less fun to use on a daily basis, not one of the nice *nix systems like OSX or Linux.

  62. 62 Miroslav AMbrus-Kis

    Please, include the same Safari service possibility: “Open selected in SimoleText”

  63. 63 Marc

    Oh, you moron, Vladimir. Investigate before you cry wolf.

  64. 64 Rambo Tribble

    I started putting desktop systems into businesses in 1977. At first, they were dedicated word processors, (anyone remember the Mag-Card?). but by 1979 they were Intel 8085-based PCs. I’ve watched Apple since its inception and Microsoft, as well. I’ve long been amazed at the free ride Apple gets while employing more Draconian anti-competitive, anti-user tactics than Gates ever dreamed of. Nor has Apple exhibited any greater honesty, at least since Woz left, than MS. The first blatant subterfuge I recall was in ’78 or ’79 when Apple advertised, in the Wall Street Journal, no less, that you could run 32 users on one Apple II Plus. I saw the ad. If that isn’t a lie, confessional can be considerably streamlined in the future.

    Steve Jobs is a Bill Gates wannabe with better clothes and less of a conscience.

  65. 65 Andre

    Has there been any attempt to try coding WebKit to only use public APIs? Surely using the public APIs would be the best was to notify the MacOS X development team of calls and operations that need to be optimized?

  66. 66 Rob

    @James:

    Do you know what a trust is? Do you know what monopoly power is? Anti-trust legislation is in place to prevent companies from controlling an entire market segment by methods unavailable to other companies; it’s not there to prevent companies from keeping trade secrets, or for not telling you everything you want to know about their products at any given time, or anything else. Apple, in the market that WebKit applies to, is *not* the dominant company, and is *not* in a position to exercise monopoly power, and therefore, anti-trust law does not apply. (In addition, I’d like to point out that WebKit is one of the more standards-supporting browsers, passing Acid2 earlier than, oh, I dunno, IE, and that, as has been said, the particular evil secret that you seem to be particularly upset by has a publicly-known method by which it can be done.

    So, yes. Reminds me *so* much of Microsoft. Apple has some parts of WebKit that it doesn’t tell you about, but that don’t prevent you from getting stuff done in another way. Oh, horrors.

    Also, just out of curiosity … what the hell are you talking about when it comes to the “buying up competitiors” part of your ill-informed rant? Apple’s bought companies to *enter* market segments, but I can’t recall any cases where they bought a *competitor*. Not saying they *haven’t*, just that I’d appreciate a few names.

  67. 67 John C. Welch

    Actually Vlad, I filed a bug about Mozilla’s lack of AppleScript support back in oh…2000. Went into some detail about it. There were some other bugs on it too.

    Oldest I could find, from 1999: https://bugzilla.mozilla.org/show_bug.cgi?id=5701
    The one I filed: https://bugzilla.mozilla.org/show_bug.cgi?id=61356
    Other bugs on this issue:
    https://bugzilla.mozilla.org/show_bug.cgi?id=125419 (many links to other bugs on this)

    note that none of these have gotten any useful resolution

    As it stands, assuming the dictionary in FF3b3 works, I can load a URL in a window (works)
    There’s a SeaMonkey suite with nothing in it, and the three commands in the old spyglass suite which let me (un)register URL handlers, and open a URL in a window, a duplicate of the “Get URL” suite

    Note that a Suite contains commands, classes, et al. You should not name a suite after the single command it takes, so there should be a “Firefox” suite that contains the “Get URL” command, not a “Get URL” suite.

  68. 68 Darren

    @Tom: Yes, that bug report is broadly what I’m looking for, and wow, it has been outstanding for a LONG time. Wonder what’s the hold up?

    Are Firefox and Camino so vastly different that the FF team cannot “borrow” code from Camino for AppleScript? Obviously there’s some shared code under the Mozilla umbrella, i.e., gecko. Is that where the similarity ends? Just trying to understand things here…

  69. 69 Rorschach

    There is a more fundamental problem here that nobody seems to be seeing. Part of the reason why Windows was such a security nightmare for so long was due to those “private” API’s that skipped all the error checking to prevent buffer overruns. They didn’t publish them but everybody (including microsoft itself) used them. How many of these private API’s have similar problems? the mere fact that they exist is an open invitation for some slimeball with more programming knowledge than ethics to bury the Mac community in security exploits. THERE IS NO SECURITY IN OBSCURITY! If you think there is, you are whistling past the graveyard. The Mac world has been complacent and it has paid off so far because until recently, there weren’t enough of you to matter. the market penetration was not high enough for security exploits to survive in the wild, they would inevitably run into too many MSX86 machines that would prevent it’s spread and act like firewalls. That has changed. But you people have not snapped to what that really means from a security standpoint yet. I urge you to stop and think long and hard about this. Because mark my words, you WILL live to regret it if you don’t.

    Unless the code has been thoroughly tested, it has NO business being published in any form. And if you ARE going to publish it and use it, you had better disclose it or you will find yourself answering to the feds for anti-trust violations.

  70. 70 truth hurts

    Wow, your site is impossible to read. I thought that Apple people were all about the easy interface?

  71. 71 cris

    I just don’t think apple script was/is/will be an high priority here when there are so many outstanding issues that weighs much more.

    I wouldn’t mind if its not a big task tho

  72. 72 Nic

    Please put legends in your graphs….

  73. 73 Grover

    You’re all nuts.

  74. 74 John C. Welch

    @darren:

    That’s assuming Camino has a solid AppleScript implementation. It doesn’t, or rather, it has an AppleScript implementation that is not noticeably better than FF’s.

    So FF borrowing from Camino would not really improve anything.

  75. 75 Hamranhansenhansen

    Safari v3 is twice as fast as Firefox v3 on MICROSOFT WINDOWS. I look forward to a future article where that is also blamed on Apple.

    Too many people jumping all over Apple for absolutely NOTHING here on this page of the Internet.

  76. 76 Eric Bachard

    Find an information with Apple documentation is painfull every time, and once you got it, you know the risk to see it deprecated for the next release …

    For example, I’m facing similar problems with ImageCapture documentation ( to integrate the feature into OpenOffice.org )

    Search on 10.4 -> nothing ??
    On 10.5 -> half of the methods are deprecated since 10.5

    So where search ? The ImageCapture SDK is really poor, and not corectly documented ..
    Similar issues with NSAccessibility .. and finaly a lot of APIs :-/

    For me the questions are

    - why Apple does not document correctly the API’s ?
    - is really Apple helping third part softwares hiding everything ?

    Last but not least: Apple bug Radar : closed, completely bloated and useless.

    It is so complicated that you cannot easely follow your own issues !!
    (Every time I have tried to file an issue it was either closed as dupe (of what? ) or lost for a year, and never solved… )

    How can third party softwares progress with Apple ?


    qɔᴉɹə

  77. 77 Enigma

    Thanks for posting this. It could help other programmers dealing with the Mac platform and provide a valuable service.

    Keep on blogging, some of us have better things to do than spread vitriol or churlishness in comments.

  78. 78 Marc

    What a virtual circle jerk. These monopoly comments are reminiscent to the tangential comments of nothing over at Politico, HuffingtonPost and every other dirt bag pseudo-political site that is nothing but a bitch session.

    People have mentioned PrivateFrameworks vs. Frameworks [Public] and it’s been that way since before NeXTSTEP was first released.
    David Hyatt points out that his team is encapsulated from the core Engineering teams and for many sound reasons he addressed.

    I tell you what. Get Firefox as a Cocoa release and better yet fix Firefox’s notorious memory bloat it has. I can’t imagine you forked FireFox to be a Pure Cocoa app where you’re juggling between retain/release autorelease pools vs. garbage collection as you realize you can’t if you want a Tiger release for Firefox 3.

    I suggest if you want to learn more about the Private Frameworks that you get an ADC Premiere license, sign an NDA and learn to socially network with the folks. When I worked at NeXT and later Apple I was amazed at the amount of misperception people had about both companies mainly due to their inexperience at interfacing with people who actually work there.

  79. 79 Nathan Duran

    Unemployable open source programmers are always the funniest armchair lawyers. I can’t wait until some OCaml or Lua nerd starts citing Plessy vs. Ferguson or whatever other irrelevant memory fragment they managed to retain from high school as they rage against the Apple machine.

  80. 80 hwertz

    @Hamranhansenhansen
    OK.. here ya go. “Damn that Apple, I can’t believe they optimized WebKit for Windows.. how dare they! Making it faster than FF3 and all!” (For the humor impaired this is of course a joke.) 8-)

    @Stephanie,
    You’re GROSSLY misinformed. A) As a few have said, Dell is shipping Ubuntu with DVD playback support; people can pay for DVD playback support for other distros if they wish. And this isn’t unique, Windows XP doesn’t support DVD playback either. B) No comment on legality. Normal people just don’t care about this, the DMCA is a broken law, and the MPAA can suck it if they want to stop me from playing DVDs on my own system. If you do care see point A. C) Installing DVD support is EASY (if it’s not already there). In Ubuntu the first time I popped in a DVD, it was more or less like “OK, we couldn’t include DVD playback support on the base install, so click this button to install it” and then it did. No “progarmming” involved like you claim. No comment on the rest of your comments, they went too far off topic.

    Back on topic..
    As for the actual original topic.. I don’t see any problem with this. I don’t think it’s good practice for something like a web browser to be using udcoumented functions, but it’s certainly not sinister. Apple does have to be careful to not let the amount of undocumented call uses etc. accumulate too much though, or they will eventually end up with one interintwined mass of crap like Microsoft ended up with.. they have a hell of a time making a change to piece A of windows without it breaking B, C, and D, due to those using undocumented internal functionality of A.

  81. 81 Joe Hodge

    Now that we know that there is always problems dealing with poorly documented code do you think you folks might take a look at supporting styled copy and paste? It’s been a problem with Gecko from the get-go. Being able to copy and paste parts of a page and retain the formatting is kind of a core ideal in Mac software and I simply cannot see a good reason to use Firefox Instead of any other Webkit-based browser that does support it. It’s been on the Gecko bug list for years and if you read through the reporting of it you will find many people being verbally abused for asking for a “feature” that should be as common as printing a page. I’m simply tired of hearing lame excuses for not making the fix and can only assume that Firefox is built on a spaghetti-code rendering engine. Sounds a lot like a Microsoft IE team excuse but even they supported this capability when IE ran on the Mac. Shame on you folks.

  82. 82 Sumesh

    Its the same old story – Apple does something bad, and everyone somehow twists it to make it look ok. MS does the same thing, and get whipped for it.

    I’m no MS fan, but I do have some sympathy for ol’ Bill Gates – atleast the guy does not wrap his corporate profit-oriented mindset in shiny marketing tactics, like Steve Jobs does. I love Apple, but more stink is coming out of Cupertino.

  83. 83 WrongWay

    Completely off topic but I really felt it needed to be mentioned.
    Vladimir the color for the font and background blend in far too easily making your site comments EXTREMELY difficult to read. Please redisgn the comments page with some better contrasting colors for easier reading. Maybe a yellow font or something so the text can stand out better? Intresting blog post though.

  84. 84 Joel

    “Live Linux, or Die!”

    LOL…This kind of thinking really cracks me up. As if computing were even slightly important. I mean, it’s fun and you can make a living at it, but “Live Linux, or die?” Come on now.

  85. 85 Chris Lees

    I don’t know why people are complaining NOW. There are always binary blobs in Apple’s “open-source” projects. Always have been. It’s completely expected behaviour. If you wanted to complain about it, you should have done so when Darwin had its inception.

  86. 86 Mecki78

    Sorry, but something is terribly wrong here. If an app runs slower, because the system limits the refresh rate, the app is broken by design (as hard as this is when I have to say it about my favorite browser). It’s completely moronic to paint more images than can be shown according to refresh rate. This leads to many images being painted, that never show up on the display in the first place. What a waste of CPU time.

    If I understand you right, the test in question is: I run a for loop, that scrolls the page down by one pixel each time. Now each time it scrolls, you issue a repaint, wait for the repaint to complete and then continue the loop. Since these repaints can’t complete faster than the refresh rate (by default, without using the hack you are currently using), the loop now runs slower. Correct? If yes, then this is broken by design. The whole repainting should by asynchron, which is a hundred times better fix than the one you found.

    Case A
    The for loop should not wait for the repaint to actually happen, it should just request to scroll one pixel and then request the repaint and continue immediately, even if the repaint did not happen. Then it should again request to scroll one pixel and request a repaint – however, this request is ignored, because a repaint is already requested. So far nothing has been re-painted and twice scrolling one pixel should be requested. The third time the loop runs it’s like the second time and so on and so on. Maybe the 8th time the loop is running, the repaint is finally taking place. Now the repaint will repaint once and will immediately scroll the page by 8 pixels. And the whole game starts again.

    Case B
    Right now you are scrolling one line and repaiting, one line and repaiting, one line and repainting and none of these repaints are ever shown on screen. After the 8th time you are scrolling and repainting, the screen refresh takes place and this repaint is finally visibly.

    Both, Case A and B will have a repaint that scrolled by 8th pixels shown on the screen as first image after the loop started. But in Case A, only one repaint was done. In Case B, 7 were done that never showed up anywhere and the 8th one is now visible. Case A is thus plenty of times more effective than Case B.

  87. 87 Mecki78

    Actually, to make my post more verbose to programmers:

    Right now Fx works like this:

    1) WHILE moreToDo
    2) doIt()
    3) repaint()
    4) END WHILE

    But that is wrong. Repaint could “hang” because it’s waiting for a screen refresh. Correct would be

    1) WHILE moreToDo
    2) WHILE notRepaintNecessary AND moreToDo
    3) doIt();
    4) END WHILE
    5) repaint();
    6) END WHILE

    That way you would only repaint if it makes sense to repaint and the fact that the maximum number of repaints a second is limited does not limit the execution speed of doIt().

  88. 88 Kristleifur

    @Mecki78: Exactly.

    I think that this is what “roc’s Compositor design” will add to Firefox, but information is scarce.

  89. 89 Mitch 74

    @Hamranhansenhansen: I think you are referring to the benches made on Javascript speed: in essence, this bench timed when a page started loading and when it reached the window.onload() event.

    It was later on discovered that Safari doesn’t fire the window.onload() event when all of the page’s content is loaded, but more like right after document.onDOMContentLoaded() event – meaning, when the HTML code has reached [EOF] but before all images, script files, CSS stylesheets etc. are done loading (as it should).

    As such, the benchmark was invalidated. In reality, under Windows, Safari is rather ‘slow’ compared with Firefox 3: it’s merely faster than IE 7.

  1. 1 Asa Dotzler - Firefox and more
  2. 2 Michael Tsai - Blog - Finding the OS X Turbo Button
  3. 3 Apple’s API Advantage | Robert Accettura’s Fun With Wordage
  4. 4 Open Rob Sayre’s Open Mozilla Open Blog » Blog Archive » Internal structures that can’t be depended on
  5. 5 Apple takes page from Microsoft | Yousef Ourabi
  6. 6 So, That’s Why Safari’s So Much Faster Than Firefox 3?
  7. 7 from hades » Blog Archive » Apples Taktik
  8. 8 Mac OS X Secretly Cripples Non-Apple Software | Code4DotNet
  9. 9 ¿Apple aplica las malas prácticas de Microsoft? Parece que no : planetamac
  10. 10 Macpro.se - Apple g
  11. 11 Just Browsing » Browsers and Commoditization
  12. 12 Interesting read about Firefox 3 beta and the much needed Turbo Button in OS | .craig
  13. 13 evil apple at nextcode:ch
  14. 14 Votez pour cette news sur Apple News MQCD
  15. 15 zzzombie » Blog Archive » Firefox OS X : turbo !
  16. 16 Petite excitation du vendredi matin | Mafia Rose
  17. 17 Software: Apple aparentemente perjudica software no desarrollado por ellos - ALT1040
  18. 18 Apple throttling non-Apple software, unfortunate biproduct « Technology Info
  19. 19 Firefox 3 ultimate feature: performance : Mozilla Links
  20. 20 foxiewire.com
  21. 21 » Shared in Google Reader: So, That’s Why Safari’s So Much Faster Than Firefox 3? South By South West Midlands
  22. 22 Macintosh Sisters » Finding the OS X Turbo Button
  23. 23 CrunchGear » Archive » Do “undocumented” OSX tweaks give Apple apps an advantage?
  24. 24 Friday tech brief « Infonatives
  25. 25 Tim Trueman » Blog Archive » Secret Leopard APIs
  26. 26 Plugged In Blog » Mummy, Apples cheating with their browser.
  27. 27 links for 2008-03-01 | SOCIALMOB
  28. 28 links for 2008-03-01 at Dwight::Knoll
  29. 29 Firefox’s Mac OS X performance issues « Dennis Laumen
  30. 30 Apple se da ventaja « Ocurrencias habituales
  31. 31 mj » Blog Archive » Lies, damned lines and journalism.
  32. 32 API segrete in Mac OS X? » Macpod.it
  33. 33 Apple é a nova M$? Mac OS X prejudica o Firefox « Terramel
  34. 34 Cuidado Apple! « asf@web
  35. 35 Moscho’s Blog » Blog Archive » Finding a worm in the Apple? Secret APIs in Mac OS X
  36. 36 » The Rant is full of exaggerated crap but the evil apple image is…. disturbing on many levels i drank the kool-aid: clutching my dixie cup of apple goodness
  37. 37 Разборки за доступ к Mac OS X API
  38. 38 iPhone SDK 未見製成品先見爭議 at MacGrass
  39. 39 shaver » year of the Gecko
  40. 40 meneame.net
  41. 41 Apple podría ocultar ‘trucos’ no documentados para favorecer sus desarrollos | SomosMac
  42. 42 Andando entrebits » Los estándares según los navegadores
  43. 43 Firefox 3 ultimate feature: Performance - DN For United Mankind Forum
  44. 44 Firefox, WebKit, and Coalesced Updates
  45. 45 Von Microsoft lernen heißt siegen lernen - The Inquirer DE