About | ACP | Buy | Industry Watch | Learning Curve | News | Products | Search | Substack
Home » Learning Curve » Hotspots


The first real release? The first good release?

Get It

Try It

It's finally out. And it's 341 MB to download. Almost like a brand new operating system. Purportedly the release they should have waited on. Except they'd been working so hard on the iPhone, trying to make it secure, and risked losing the holiday market. So they ship a beta instead.

Partition starts out with 45.739 available. It will lose 235 when all's said and done.

The 341 MB is often cited as the extent of the work that's gone into 10.5.2. This is not true. The 341 MB is only representative of the modules that are being updated.

This file goes right into /Library/Updates.

<?xml version="1.0" encoding="UTF-8"?>
<installer-gui-script minSpecVersion='1'>

    <options customize='never'/>
    <options hostArchitectures='ppc,i386'/>

        <client arch="ppc,i386"/>
        <server arch="ppc,i386"/>

    <license file="License.rtf" sla="EA0390"/>
    <readme file='SUDescription.html'/>

    <choices-outline ui='SoftwareUpdate'>
        <line choice='su'/>
        <line choice='manual'/>

    <choice id='su' suDisabledGroupID='MacOSXUpd10.5.2'>
        <pkg-ref id='patch' auth='Root' onConclusion='RequireRestart'>MacOSXUpd10.5.2Patch.pkg</pkg-ref>
        <pkg-ref id='auto' auth='Root' onConclusion='RequireRestart'>MacOSXUpd10.5.2.pkg</pkg-ref>
    <choice id='manual' title='SU_TITLE'>
        <pkg-ref id='manual' auth='Root' onConclusion='RequireRestart'>#MacOSXUpd10.5.2.pkg</pkg-ref>

    <choice id='su' title='SU_TITLE' />
    <choice id='su' versStr='SU_VERS' />
    <choice id='su' description='SU_DESCRIPTION' description-mime-type='text/html' />
    <choice id='su' secondaryDescription='SU_SERVERCOMMENT' />
    <choice id='su' visible='commonRequirements() && !checkAlreadyInstalled() && !isServer()' />

    <volume-check script='volumeCheck()'/>


        function volumeCheck()
            if (system.env.OS_INSTALL == 1) {
                return true;

            if (commonRequirements()) {
                return true;

            my.result.type = 'Fatal';
            my.result.message = system.localizedString('ERROR_INSTALL');
            return false;

        function commonRequirements()
            try {
                // 10.5.1 or 10.5.2 only
                if(-1 == system.compareVersions(my.target.systemVersion.ProductVersion, '10.5.1')) {
                    return false;

                if(1 == system.compareVersions(my.target.systemVersion.ProductVersion, '10.5.2')) {
                    return false;

                if (0 == system.compareVersions(my.target.systemVersion.ProductVersion, '10.5.2')) {
                    if(-1 != system.compareVersions(my.target.systemVersion.ProductBuildVersion.substring(2), '2000')) {
                        return false;

                if (hasTier3()) {
                    return false;

                if (isServer()) {
                    return false;

            catch(err) { return false; }

            return true;

        function hasX11Installed() {
            return system.files.fileExistsAtPath(my.target.mountpoint + "/Applications/Utilities/X11.app/Contents/Info.plist");

        function hasTier3()
            return (system.files.fileExistsAtPath(my.target.mountpoint + "/var/db/.AppleTier3Language"));

        // for SU
        function checkAlreadyInstalled()
            if(0 == system.compareVersions(my.target.systemVersion.ProductVersion, '10.5.2')) {
                return true;

            return false;

        function isServer() {
                return false;
              return true;


    <pkg-ref id='auto' installKBytes='1238982' version=''/>
    <pkg-ref id='patch' installKBytes='0' version=''/>
    <pkg-ref id='manual' installKBytes='1238982' version=''/>
        <strings language="English">
// From Localiazable.strings
"SU_TITLE" = "Mac OS X Update";
"SU_VERS" = "10.5.2";
"SU_SERVERCOMMENT" = "For Desktop Systems";

// From HTML description file
"SU_DESCRIPTION" = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <meta http-equiv="Content-Style-Type" content="text/css">
  <style type="text/css">
    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Lucida Grande; color: #071000}
<p class="p1">The 10.5.2 Update is recommended for all users running Mac OS X Leopard and includes general operating system fixes that enhance the stability, compatibility and security of your Mac.</p>
<br />
<p class="p1">For detailed information on this update, please visit this website: <a href="http://docs.info.apple.com/article.html?artnum=307109">http://docs.info.apple.com/article.html?artnum=307109</a>.</p>
<p class="p1">For detailed information on security updates, please visit this website: <a href="http://docs.info.apple.com/article.html?artnum=61798">http://docs.info.apple.com/article.html?artnum=61798</a>.</p>

install.log - note the inability to 'find' Finder.

Feb 12 08:10:19 Rixstep Software Update[2142]: JS: 10.5.1
Feb 12 08:10:19 Rixstep Software Update[2142]: JS: 10.5.1
Feb 12 08:10:22 Rixstep installdb[2146]: started (uid 96)
Feb 12 08:10:24 Rixstep Software Update[2142]: Package Authoring Error: installation-check results requires a message
Feb 12 08:10:30: --- last message repeated 4 times ---
Feb 12 08:10:30 Rixstep Software Update[2142]: JS: model = MacBookPro2,2
Feb 12 08:10:37 Rixstep Software Update[2142]: JS: 10.5.1
Feb 12 08:10:52: --- last message repeated 3 times ---
Feb 12 08:10:52 Rixstep installdb[2146]: done. (0.017u + 0.012s)
Feb 12 08:10:54 Rixstep installdb[2148]: started (uid 96)
Feb 12 08:10:57 Rixstep Software Update[2142]: JS: Firmware is up to date.
Feb 12 08:11:00 Rixstep Software Update[2142]: JavaScript error "Undefined value" while running "__choice_su_visible"
Feb 12 08:11:00 Rixstep Software Update[2142]: __choice_su_visible returned error: Undefined value
Feb 12 08:11:15 Rixstep installdb[2148]: done. (0.019u + 0.012s)
Feb 12 08:11:17 Rixstep Software Update[2142]: ./Applications/iChat.app installed to /Applications/iChat.app
Feb 12 08:11:18 Rixstep Software Update[2142]: ./Applications/Utilities/Activity Monitor.app installed to /Applications/Utilities/Activity Monitor.app
Feb 12 08:11:20 Rixstep Software Update[2142]: ./Applications/Preview.app installed to /Applications/Preview.app
Feb 12 08:11:21 Rixstep Software Update[2142]: ./Applications/iSync.app installed to /Applications/iSync.app
Feb 12 08:11:23 Rixstep Software Update[2142]: ./Applications/Utilities/Keychain Access.app installed to /Applications/Utilities/Keychain Access.app
Feb 12 08:11:24 Rixstep Software Update[2142]: ./Applications/iCal.app installed to /Applications/iCal.app
Feb 12 08:11:25 Rixstep Software Update[2142]: ./Applications/Dictionary.app installed to /Applications/Dictionary.app
Feb 12 08:11:25 Rixstep Software Update[2142]: ./Applications/Photo Booth.app installed to /Applications/Photo Booth.app
Feb 12 08:11:25 Rixstep Software Update[2142]: ./Applications/Automator.app installed to /Applications/Automator.app
Feb 12 08:11:27 Rixstep Software Update[2142]: ./Applications/Address Book.app installed to /Applications/Address Book.app
Feb 12 08:11:30 Rixstep Software Update[2142]: ./Applications/DVD Player.app installed to /Applications/DVD Player.app
Feb 12 08:11:31 Rixstep Software Update[2142]: ./Applications/Spaces.app installed to /Applications/Spaces.app
Feb 12 08:11:33 Rixstep Software Update[2142]: ./Applications/Mail.app installed to /Applications/Mail.app
Feb 12 08:11:36 Rixstep Software Update[2142]: ./Applications/Dashboard.app installed to /Applications/Dashboard.app
Feb 12 08:11:37 Rixstep Software Update[2142]: ./Applications/Time Machine.app installed to /Applications/Time Machine.app
Feb 12 08:11:47 Rixstep Software Update[2142]: ./Applications/Utilities/Bluetooth File Exchange.app installed to /Applications/Utilities/Bluetooth File Exchange.app
Feb 12 08:11:48 Rixstep Software Update[2142]: Could not find expected file /./System/Library/CoreServices/Finder.app/Contents/MacOS/Finder to patch.
Feb 12 08:11:49 Rixstep installdb[2149]: started (uid 96)
Feb 12 08:11:55 Rixstep installdb[2149]: done. (0.005u + 0.003s)
Feb 12 08:12:26 Rixstep Software Update[2142]: Calculated need 2558 MB; 46577 MB free.

At the time this file was written no changes actually took place in the designated target areas.

What's interesting of course is seeing how many of the really annoying - not to say embarrassing - bugs have been fixed. And as Tracker's running this puppy it'll be possible to see what's been updated and what's not.

One of the most important things is going to be to clean the Services menu again. It's as if the vendor can't leave well enough alone. And it's sad the two apps whose services you do not need are going to insist on keeping them anyway - they're 'signed' and won't use the keychain if you remove their services. Because the checksums for everything are baked into the executables per architecture and you can't reasonably get them out.

'User friendly'.

Another big issue is file management. It's not been good on Leopard. And even though one can suspect underlying 'excuses' they're going to be just that and little more - excuses. You don't go messing with basic file system intrinsics and behaviour - not if you want to avoid having another MacOS on your hands. And nobody wants that. It wouldn't be good to have to say goodbye to all that rock solid foundation stuff.

And how about inodes? You can't 'update' files anymore. They're not opened for writing and written to. They're saved at a remote temporary location and then not copied but moved into place. Massive data loss anyone? Not to speak of it just being absolutely - what's the right word? Sloppy? Amateurish? No. Wait.

Yes. Here it is:


For if Apple can't even do ordinary Unix file management anymore this platform isn't supportable. In such case it's just a joke. Not that people didn't see it coming - they just preferred it didn't arrive.

It's just not right all these crackerjack 'improvements' actually make the system less user friendly time and time again. It's just - well it must be a bit like what Copland was. Abortive, without a hope, a mess - and after ten years of ruining NeXTSTEP maybe it's time Apple bought a new operating system they can ruin.

A tip: show download progress not as three digits but as at least one decimal.

Maybe they did something about this obscene shadowing. Which still doesn't work right with congruent windows. People couldn't understand why they'd want so much shadowing. It's to make the entire desktop look more three dimensional. But that still doesn't make it understandable.

Going so fast for an update is not a good policy. Unless of course the current release you have is pure shit. Which is what applies here. Of course.

How about sluggishness in NSTextView? How about keyboard shortcuts in NSOutlineView? How about selections in NSTableView? Any chance they'll be fixed? Or is Tiger the new Windows XP?

Finally ready.

$ cd '/Library/Updates/Mac OS X Update/Packages'
$ ls -ailO
total 698672
663111 drwxr-xr-x  4 rixstep  admin  -       136 Feb 12 09:00 .
663110 drwxr-xr-x  4 rixstep  admin  -       136 Feb 12 08:12 ..
663112 -rw-r--r--  1 rixstep  admin  -      4793 Feb 12 08:12 MacOSXUpd10.5.2-10.5.2.dist
663118 -rw-r--r--  1 rixstep  admin  - 357708437 Feb  7 23:34 MacOSXUpd10.5.2.pkg

235 MB lost disk space. On an update - no new modules. So - anything been fixed?

Doesn't look that way. Document controller still trashes inodes. Selection in table views still not fixed. Shortcuts in outline views still not fixed. This is starting good.

NSTextView can be a bit more spiffy. Hard to say yet.

Time Machine menulet no one wants. Services menu a disaster all over again. So encouraging. Everybody loves an update!

Time to track.

Lots of Ruby shit been updated. Gotta love those mile long table view tooltips. How helpful; how well thought out. Not. How totally fucking stupid and annoying. Tonnes of crap in /usr/bin.

Final tally? 24292 files modified in the 10.5.2 download. Twenty four thousand two hundred ninety two. Tracker file is 6 MB.

 Start: Tue Feb 12 08:08:54 2008
  Stop: Tue Feb 12 09:14:56 2008
 Paths: /

Unbelievable they still haven't fixed the table view selections. This is the third release. This has worked consistently and well since 10.1.2 and now it's broken and they can't fix it. They gotta fix iChat instead.

This system - this company - can't be taken seriously.

It's hard to say but the outline flippy may have grown a bit. Or more accurately be of a slightly darker colour as it's never been shrunk. But calculations for placement are still not correct. More pinhead sloppy work that persists and is allowed to stand.

OK time to test Safari. Begin with 'Inspect Element' bug. Basically if you choose this off the context menu and JS isn't enabled the whole sick thing crashes. OK let's see.

Safari up. Pick a website. Check preferences. Choose Inspect Element.

Yep. Same old nonsense.

Short call stack too.

Process:         Safari [313]
Path:            /Applications/Safari.app/Contents/MacOS/Safari
Identifier:      com.apple.Safari
Version:         3.0.4 (5523.15)
Build Info:      WebBrowser-55231500~3
Code Type:       X86 (Native)
Parent Process:  launchd [105]

Date/Time:       2008-02-12 09:35:24.377 +0100
OS Version:      Mac OS X 10.5.2 (9C31)
Report Version:  6

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x000000000000000c
Crashed Thread:  0

Thread 0 Crashed:
0   com.apple.JavaScriptCore      	0x93c6312a KJS::PropertyMap::put(KJS::Identifier const&, KJS::JSValue*, int, bool) + 26
1   com.apple.JavaScriptCore      	0x93c75b11 KJS::JSObject::putDirect(KJS::Identifier const&, KJS::JSValue*, int) + 49
2   com.apple.WebCore             	0x90da3a9c WebCore::toJS(KJS::ExecState*, WebCore::Document*) + 204
3   com.apple.WebCore             	0x90da7b29 WebCore::toJS(KJS::ExecState*, WTF::PassRefPtr) + 585
4   com.apple.WebCore             	0x90e381d3 WebCore::toJS(KJS::ExecState*, WebCore::EventTarget*) + 115
5   com.apple.WebCore             	0x91197e2a WebCore::getResourceDocumentNode(OpaqueJSContext const*, OpaqueJSValue*, OpaqueJSValue*, unsigned long, OpaqueJSValue const* const*, OpaqueJSValue const**) + 634
6   com.apple.JavaScriptCore      	0x93ce03b3 KJS::JSCallbackFunction::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&) + 115
7   com.apple.JavaScriptCore      	0x93c75a13 KJS::FunctionCallDotNode::evaluate(KJS::ExecState*) + 915
8   com.apple.JavaScriptCore      	0x93c81f45 KJS::ReturnNode::execute(KJS::ExecState*) + 133
9   com.apple.JavaScriptCore      	0x93c82797 KJS::IfNode::execute(KJS::ExecState*) + 407
10  com.apple.JavaScriptCore      	0x93c73e0b KJS::SourceElementsNode::execute(KJS::ExecState*) + 139
11  com.apple.JavaScriptCore      	0x93c73601 KJS::BlockNode::execute(KJS::ExecState*) + 49
12  com.apple.JavaScriptCore      	0x93c7f57c KJS::DeclaredFunctionImp::execute(KJS::ExecState*) + 28
13  com.apple.JavaScriptCore      	0x93c7ef8f KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&) + 559
14  com.apple.JavaScriptCore      	0x93ce9d1a KJS::PropertySlot::functionGetter(KJS::ExecState*, KJS::JSObject*, KJS::Identifier const&, KJS::PropertySlot const&) + 154
15  com.apple.JavaScriptCore      	0x93c7526a KJS::DotAccessorNode::evaluate(KJS::ExecState*) + 250
16  com.apple.JavaScriptCore      	0x93c7c241 KJS::EqualNode::evaluate(KJS::ExecState*) + 33
17  com.apple.JavaScriptCore      	0x93c82645 KJS::IfNode::execute(KJS::ExecState*) + 69
18  com.apple.JavaScriptCore      	0x93c73f27 KJS::SourceElementsNode::execute(KJS::ExecState*) + 423
19  com.apple.JavaScriptCore      	0x93c73601 KJS::BlockNode::execute(KJS::ExecState*) + 49
20  com.apple.JavaScriptCore      	0x93c86b77 KJS::ForNode::execute(KJS::ExecState*) + 295
21  com.apple.JavaScriptCore      	0x93c73f27 KJS::SourceElementsNode::execute(KJS::ExecState*) + 423
22  com.apple.JavaScriptCore      	0x93c73601 KJS::BlockNode::execute(KJS::ExecState*) + 49
23  com.apple.JavaScriptCore      	0x93c7f57c KJS::DeclaredFunctionImp::execute(KJS::ExecState*) + 28
24  com.apple.JavaScriptCore      	0x93c7ef8f KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&) + 559
25  com.apple.JavaScriptCore      	0x93caa127 KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&) + 135
26  com.apple.JavaScriptCore      	0x93cddc73 JSObjectCallAsFunction + 83
27  com.apple.WebCore             	0x911954f3 WebCore::InspectorController::focusNode() + 291
28  com.apple.WebKit              	0x961eeb9c -[WebInspectorWindowController showWindow:] + 92
29  com.apple.WebKit              	0x961eea4a WebInspectorClient::showWindow() + 58
30  com.apple.WebCore             	0x911947a1 WebCore::loaded(OpaqueJSContext const*, OpaqueJSValue*, OpaqueJSValue*, unsigned long, OpaqueJSValue const* const*, OpaqueJSValue const**) + 33
31  com.apple.JavaScriptCore      	0x93ce03b3 KJS::JSCallbackFunction::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&) + 115
32  com.apple.JavaScriptCore      	0x93c75a13 KJS::FunctionCallDotNode::evaluate(KJS::ExecState*) + 915
33  com.apple.JavaScriptCore      	0x93c7e735 KJS::ExprStatementNode::execute(KJS::ExecState*) + 69
34  com.apple.JavaScriptCore      	0x93c73f27 KJS::SourceElementsNode::execute(KJS::ExecState*) + 423
35  com.apple.JavaScriptCore      	0x93c73601 KJS::BlockNode::execute(KJS::ExecState*) + 49
36  com.apple.JavaScriptCore      	0x93c7f57c KJS::DeclaredFunctionImp::execute(KJS::ExecState*) + 28
37  com.apple.JavaScriptCore      	0x93c7ef8f KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&) + 559
38  com.apple.JavaScriptCore      	0x93c75a13 KJS::FunctionCallDotNode::evaluate(KJS::ExecState*) + 915
39  com.apple.JavaScriptCore      	0x93c7e735 KJS::ExprStatementNode::execute(KJS::ExecState*) + 69
40  com.apple.JavaScriptCore      	0x93c73e0b KJS::SourceElementsNode::execute(KJS::ExecState*) + 139
41  com.apple.JavaScriptCore      	0x93c73601 KJS::BlockNode::execute(KJS::ExecState*) + 49
42  com.apple.JavaScriptCore      	0x93c7f57c KJS::DeclaredFunctionImp::execute(KJS::ExecState*) + 28
43  com.apple.JavaScriptCore      	0x93c7ef8f KJS::FunctionImp::callAsFunction(KJS::ExecState*, KJS::JSObject*, KJS::List const&) + 559
44  com.apple.JavaScriptCore      	0x93caa127 KJS::JSObject::call(KJS::ExecState*, KJS::JSObject*, KJS::List const&) + 135
45  com.apple.WebCore             	0x90e186f2 WebCore::JSAbstractEventListener::handleEvent(WebCore::Event*, bool) + 1074
46  com.apple.WebCore             	0x90d7a466 WebCore::Document::handleWindowEvent(WebCore::Event*, bool) + 166
47  com.apple.WebCore             	0x90d7a1b0 WebCore::EventTargetNode::dispatchWindowEvent(WebCore::AtomicString const&, bool, bool) + 192
48  com.apple.WebCore             	0x90d682dc WebCore::Document::implicitClose() + 252
49  com.apple.WebCore             	0x90d299d4 WebCore::FrameLoader::checkCallImplicitClose() + 308
50  com.apple.WebCore             	0x90d2981b WebCore::FrameLoader::checkCompleted() + 187
51  com.apple.WebCore             	0x90d9afa7 WebCore::Loader::didFinishLoading(WebCore::SubresourceLoader*) + 327
52  com.apple.WebCore             	0x90d97b61 WebCore::SubresourceLoader::didFinishLoading() + 49
53  com.apple.WebCore             	0x90d95d98 -[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:] + 72
54  com.apple.Foundation          	0x94b528b7 -[NSURLConnection(NSURLConnectionReallyInternal) sendDidFinishLoading] + 87
55  com.apple.Foundation          	0x94b52844 _NSURLConnectionDidFinishLoading + 68
56  com.apple.CFNetwork           	0x952f07f3 sendDidFinishLoadingCallback + 148
57  com.apple.CFNetwork           	0x952ed920 _CFURLConnectionSendCallbacks + 1994
58  com.apple.CFNetwork           	0x952ed0d9 muxerSourcePerform + 283
59  com.apple.CoreFoundation      	0x941e962e CFRunLoopRunSpecific + 3166
60  com.apple.CoreFoundation      	0x941e9d18 CFRunLoopRunInMode + 88
61  com.apple.HIToolbox           	0x9480a6a0 RunCurrentEventLoopInMode + 283
62  com.apple.HIToolbox           	0x9480a4b9 ReceiveNextEventCommon + 374
63  com.apple.HIToolbox           	0x9480a32d BlockUntilNextEventMatchingListInMode + 106
64  com.apple.AppKit              	0x956297d9 _DPSNextEvent + 657
65  com.apple.AppKit              	0x9562908e -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
66  com.apple.Safari              	0x0000997e 0x1000 + 35198
67  com.apple.AppKit              	0x956220c5 -[NSApplication run] + 795
68  com.apple.AppKit              	0x955ef30a NSApplicationMain + 574
69  com.apple.Safari              	0x00002456 0x1000 + 5206

OK more tests with the world's greatest browser. How about Chinese on Apple's homepage?

Yeah we're looking good all right.

So - executive summary? Already? Why not. Ahem. 'Not ready for prime time. Not even close.'

But is there nothing good about 10.5.2? Nothing at all?

Actually it's too early to say. Sysadmins are going to have to report on connectivity and so forth. But the first run through and check of the issues from 10.5.0 and earlier yields nothing. Oh there's one thing - one thing that in itself represents a major breakthrough. Bud and Bertrand must have pushed hard on this one.

Now to figure out where those 235 MB went off to. And how an update on one partition eats 20 MB on another.

About | ACP | Buy | Industry Watch | Learning Curve | News | Products | Search | Substack
Copyright © Rixstep. All rights reserved.