-----BEGIN PGP SIGNED MESSAGE-----Hash: SHA1MDJ 2003.05.11 (May 11, 2003)=============================   Copyright 2003, GCSF Incorporated.  All rights reserved.Top of the Day--------------**More Mac OS X news**  The new Mac OS X 10.2.6 update does what a bug fix update  should: it fixes critical customer bugs quickly in a small  update that's understandable and almost completely documented,  we think.  It solves problems with USB hubs that showed up with  10.2.5, even though they weren't Apple's fault. It fixes  AppleShare file corruption, though the user-level release notes  don't admit it. There are OpenGL improvements, support for a new  phone in Address Book, some printing improvements, and that's  about it. In today's double-length feature, we examine the  updates, clarify the confusing Mac OS X Server 10.2.6 update,  and debunk the myths already circulating about exactly what the  update and its updaters do. Renew your acquaintance with the  state of Mac OS X art today.**Up next**  Our first look at the best new disk utility of the year:  Alsoft's DiskWarrior 3. Stay tuned!Mac OS X 10.2.6: A small, efficient update------------------------------------------**6MB revision fixes hot-button 10.2.5 issues**  Imagine for a moment that you write USB device drivers for Apple  Computer.  In Mac OS X, device drivers are kernel extensions - code that  runs inside the Mach Kernel's address space, just like Photoshop  plug-ins run in Photoshop's address space. If a Photoshop  plug-in crashes, it can bring down the entire application, but  if the kernel crashes, the OS halts. The kernel can't  "unexpectedly quit." Those crashes are kernel panics, and they  bring down the entire system.  In short, kernel panics are bad. Kernel-resident code therefore  must be exceptionally bulletproof.  So you're working on improving the USB support in the operating  system, and you wind up in the code for when the Universal  Serial Bus is reset. It happens more often than you might think,  including when devices are attached or removed, or perhaps even  when drivers load or unload. You're looking for some problems in  the response to a bus reset. The USB specification requires that  all devices respond to an enumeration request after the bus  resets, even before they're assigned device IDs and the bus is  ready for normal traffic.  Maybe the enumeration code somewhere else is not working  properly and that's interfering with recognizing some devices  when they're plugged in. Or maybe some devices only respond  properly if enumerated after bus reset. You can't enumerate the  bus twice to solve the problem later, but as you debug it, you  realize you don't have to. The specification says enumeration  _must_ work here, so you change the code to rely on that. The  old code allowed for devices that didn't respond, but the  specification says they _have_ to respond, so you cut out the  old code that caused trouble on some devices.  You could just leave it that way, but since you're a trained  programmer, you probably put in a line that raises an exception -  an error condition - if a device doesn't respond properly. You  raise the error because if your code gets to that point, the USB  bus would be in an unsupportable state and your code wouldn't  know how to continue. When you're about to go wandering in the  weeds, it's better to raise a flag than cause more trouble. Any  error would panic the kernel, but the line of code that raises  the exception should never get called - the USB specification  _requires__devices to respond. Specifications exist to mandate  such rules.  So you build your change. It seems to work, and the original  problem devices now behave. You send it off to Apple's test  engineers, who try it with a few hundred USB devices, and none  of the engineers find any problems. It gets seeded to external  developers, and they don't report any specific problems. You  therefore consider it another problem solved and go about more  USB business. You look forward to the next release of Mac OS X,  so people who want this fix can have it.  One day, your fix ships as part of Mac OS X 10.2.5. Of course,  there are always reports of individual problems with any new OS  release, but most of them are hard to verify, or are from people  blaming the OS for bad programs or bad middleware. It's only the  patterns that are scary.  Understandably, you're not happy when a pattern emerges.  The customer support line and multiple Web sites are reporting a  kernel panic several minutes after booting, but only if some USB  devices are connected. You get this sinking feeling in your  stomach, because that's _your_ area, and you changed the code  for this release. So you go back and look, and you see no  problems: your code is up to spec and well-tested.  The customer service folks find a few common threads in the  complaints, so they send along the names of a few USB hubs that  several people mentioned as causing kernel panics when  connected. You run out to Fry's and buy one, you plug it in, and  sure enough, the kernel panics.  Your heart _sinks_, because people using your code are seeing  their systems crash when they didn't before. You have to find  out what's causing this and fix it in the very next update.  After some debugging, it turns out that it's not your fault  after all. A fair number of USB hubs use some chips or software  that disobeys the specification by not responding to enumeration  requests after bus reset. The specification clearly says they  _must_ do that, but they don't. The code path you removed to fix  other devices no longer handles these errant ones because, well,  you removed it. These peripherals do exactly what they're not  supposed to do, so they fall through to the case that should  never happen. Your code raises an exception and panics the  kernel.  Of course, you spend some time being mad at stupid USB hub  makers, since the entire reason to buy their product is that it  allegedly meets a standard you've shown it to violate. What's  the point in buying a "USB" device if it doesn't work with USB?  But customers have these defective hunks of plastic, and telling  them "Go buy better USB devices" isn't really an option.  Instead, you buy some of these substandard hubs for the testing  lab, hoping the extra testing doesn't require hiring more  engineers. You go back and put in code to accommodate the  defective devices, and you wonder in idle moments if you should  have found the problem before it shipped even though it wasn't  your fault.  Keep that up for five years and you get a nice gold Apple-shaped  pin with five small diamonds. You can sell it for about 0.05% of  the cost of a house in Cupertino.**The tiny update**  This description is entirely imaginary but based on a true  element: USB hubs that fail to enumerate after reset as  _required_ by the USB specification panic the kernel [1] in Mac  OS X 10.2.5. It's not the operating system's fault, but people  with the hubs don't want to hear that, so Apple fixed it. That  and another nasty bug are the primary reasons Apple released Mac  OS X 10.2.6 on 2003.05.06, less than one month after the  2003.04.10 release of Mac OS X 10.2.5 (MDJ_ 2003.04.14). The  company followed that two days later with Mac OS X Server  10.2.6, an update so similar it almost makes your head spin. Mac  OS X 10.2.6 is available as a 6MB updater [2] from Mac OS X  10.2.5 or an 86MB "Combo" updater [3] for any system since Mac  OS X 10.2. Mac OS X Server 10.2.6 is also available as a 4MB  updater [4] from Mac OS X Server 10.2.5 or as a 103MB "Combo"  updater [5] for any version since Mac OS X Server 10.2.  [1] <http://docs.info.apple.com/article.html?artnum=25440>  [2] <http://www.info.apple.com/kbnum/n70173>  [3] <http://www.info.apple.com/kbnum/n70174>  [4] <http://www.info.apple.com/kbnum/n120216>  [5] <http://www.info.apple.com/kbnum/n120217>  These updates are small, compared to 23.3MB for November's Mac  OS X 10.2.2, 50.9MB for December's Mac OS X 10.2.3, 40.6MB for  February's Mac OS X 10.2.4, and 38.2MB for the recent Mac OS X  10.2.5. The Mac OS X 10.2.6 user-level release notes [6]  describe only six changes, almost but not quite everything in  the update. The Mac OS X Server 10.2.6 release notes [7] offer a  few more changes that also apply to the non-server version, plus  some mysteries.  [6] <http://docs.info.apple.com/article.html?artnum=107531>  [7] <http://docs.info.apple.com/article.html?artnum=107531>  Here's what we found, and as is now usual, you can grab our  hierarchical OPML outline of all the files in either the Mac OS  X 10.2.6 [8] or Mac OS X Server 10.2.6 [9] updates if you wish.  [8] <http://www.macjournals.com/special/1026.opml>  [9] <http://www.macjournals.com/special/1026server.opml>**Server shenanigans** -- Comparing those two OPML files shows  something remarkably annoying: the Mac OS X 10.2.6 and Mac OS X  Server 10.2.6 updates are _identical_ save for one file. The  server installer updates  "/System/Library/CoreServices/ServerVersion.plist", the file  that identifies the installed operating system as Mac OS X  Server instead of plain Mac OS X Server. Every other file that  Mac OS X Server 10.2.6 installs is also installed by the Mac OS  X 10.2.6 updater. The archive sizes are different due to  compression differences, different installer scripts (the server  updater makes sure you're running it on Mac OS X Server),  different "Read Me" files, and so on. The actual operating  system files installed by the two updaters are the same.  This is annoying largely because Apple seems unable to make up  its corporate mind on what a "Mac OS X Server" update really is.  The Mac OS X Server 10.2.5 update, for example, contained only  files specific to Mac OS X Server, and could only be installed  on a machine that already had the Mac OS X 10.2.5 Update applied  to it, even though many server-related changes were implemented  in the core operating system (MDJ_ 2003.04.14). For 10.2.6,  however, server administrators are wasting time applying the  non-server update first, as the only different file they'll get  is the ServerVersion.plist file. Updates are already mysterious  enough: Apple needs to decide if server updates require  similarly numbered non-server updates or not, and stick with  that decision.  It's also bad for regular users because, as usual, Apple  documents some changes that apply to every system only in the  server version's release notes, usually a few days after the  fact. We've integrated those changes into this description, but  honestly, average users shouldn't have to read server release  notes to figure out what changed on their iMacs or iBooks.**Applications** -- The only changed application of any kind in  Mac OS X 10.2.6 is, once again, Address Book, but the program  itself is not changed: only the ABDeviceCommandSets.plist file  inside Address Book's telephony bundle, found within the  application's package. That XML file contains modem strings to  control functions on several Bluetooth phones, the mechanism  behind Address Book's ability to dial your Bluetooth phone on  request. The revised file supports the Sony Ericsson T610 phone.  The only other revised files inside Address Book are XML files  to bump the version of both the Telephony bundle and the Address  Book application itself, but again, no code changed. As part of  this, the Address Book public framework (in  "/System/Library/Frameworks") also has revised version numbers,  but again, no code-level changes. None.**System** -- All of Mac OS X 10.2.6's system-level changes are  implemented either in a revised Mach kernel file  ("/mach_kernel") or in six subdirectories of the  "/System/Library" hierarchy: there are no changes to Unix  components like CUPS or Samba, no revised utilities, no updated  preference panes, or anything like that. In fact, one of those  subfolders has only a trivial change: the only revised file in  "/System/Library/CoreServices" is SystemVersion.plist. It  defines this release as Mac OS X 10.2.6, build 6L60. (The same  folder has the revised ServerVersion.plist file in the Mac OS X  Server 10.2.6 update.)  Other folders also have only lightweight changes. The only  changed file in "/System/Library/Printers" is  libLW8Converter.dylib, one we believe the system uses to convert  LaserWriter 8-specific printing routines used by some Carbon  applications (mostly from Adobe) to something that Mac OS X's  CUPS-based architecture can use. Mac OS X 10.2.6 changes that  conversion so that such programs can now use PostScript-based  OpenType fonts through these LaserWriter 8-specific routines.  The System Configuration framework that Mac OS X Server uses  gets a revised bundle for controlling USB-based uninterruptible  power supplies, and that change (both code and version data) is  the only revision in the "/System/Library/SystemConfiguration"  folder.  Three more public frameworks in "/System/Library/Frameworks"  change in addition to the previously-mentioned Address Book  version changes. The massive umbrella Application Services  framework is revised in Mac OS X 10.2.6, but only to change the  QuickDraw framework that implements the Mac OS X-native version  of the Mac's classic graphics package. The documented change to  improve Maya Auto Paint and Paint Effects is either in QuickDraw  or OpenGL, but we know of no other change that can be tied to  QuickDraw.  The equally-massive Core Services public framework also sees  updates in Mac OS X 10.2.6, but only to two of its component  frameworks: the Carbon Core and OS Services frameworks. Apple  packages many of its most common frameworks in larger umbrella  frameworks for the convenience of programmers: a program that  binds to Core Services automatically gets the Carbon Core and OS  Services, along with Core Foundation Networking and Web  Services.  We think these frameworks may fix a Mac OS X 10.2.5 problem that  disabled non-Roman scripts (writing systems and text input) if  English was your default language. As it turned out, if you  wanted to use a script like Traditional Chinese or Korean, you  had to have that script's default font installed. If you didn't,  the script wouldn't even show up in the International preference  pane or the Input menu (the one with a flag). On the other hand,  Apple now documents [10] those problems as caused by bad  international-related cache files that weren't properly cleared  during the Mac OS X 10.2.5 software update. The Mac OS X 10.2.6  installer takes care of them, or you can do it yourself by  following Apple's instructions.  [10] <http://docs.info.apple.com/article.html?artnum=107534>  That's all the user-level release notes say might be related,  but the server notes go a bit farther, saying the "Core OS" was  updated to "address a rare condition in which users cannot  complete the login process." No further details are available.  Mac OS X 10.2.6's last updated framework is for OpenGL. That's  almost certainly behind the documented improvement for Unreal  Tournament 2003 on GeForce2 MX and GeForce4 MX graphics chips,  and possibly behind Maya improvements as well. Apple only  recently documented [11] OpenGL changes in Mac OS X 10.2.5,  including support for the ATI Radeon 9700 Pro graphics  processor, some new OpenGL extensions, and lots of bug fixes.  The framework has revised OpenGL dynamic libraries, and revised  plug-in bundles for 16-bit and 24-bit color (technically, five  bits per channel and eight bits per channel) for 16-bit and  32-bit data. The "/System/Library/Extensions" folder, home of  kernel extensions, has revised GeForce2 MX and GeForce3 OpenGL  drivers as part of these fixes.  [11] <http://developer.apple.com/qa/qa2001/qa1258.html>**The server changes** -- That folder also contains a revised  USB driver family kernel extension as part of the misbehaving  USB hub fix, documented also in the server release notes as  "improve[d] compatibility with some USB devices, providing  greater system reliability." Although that's the last documented  change, there's one more revised kernel extension: the driver  for PC Cards. Removing and reinserting the Novatel Wireless CDMA  1.9 GHz PC Card under Mac OS X 10.2.5 didn't work properly; Mac  OS X 10.2.6 fixes that, and MacFixIt readers report other PC  Card improvements as well.  On the other hand, there's a change in the update that's not  documented at all in the user-level release notes: a revised  AppleShare file system. More specifically, Mac OS X 10.2.6  contains a new version of the AppleShare file system kernel  extension, found in the "/System/Library/Filesystems/AppleShare"  folder. There have been third-party reports of corruption in  copying files to AppleShare volumes under Mac OS X 10.2.5, as  well as continued reports that some versions of AppleShare don't  get along with Microsoft's UAM (user authentication method) for  its Windows servers. Only in the Mac OS X Server 10.2.6 release  notes does Apple own up to both bugs and admit that the update  fixes them.  The server notes also say that the update provides "more  reliable software installation for a client computer that is  installing from a file located on a remote AFP server volume,"  but that probably applies to the AppleShare file system (the  client software that mounts servers), not the AppleShare file  server (the program that shares your disks either as File  Sharing or as the AFP File Service on Mac OS X Server). It's  just that not many people install software over file sharing  compared to installing from dedicated file servers, so it's not  much of an issue for most users.  The server release notes also say the update provides an  "improved CUPS printing experience for Hewlett Packard LaserJet  8150 CN laser printer[s], allowing full text and image print by  default." It's hard to see how that can be true: no part of CUPS  is revised in 10.2.6, and the only printing change is to the  LaserWriter 8 compatibility library, as mentioned. Perhaps it's  a change that only affects applications using the older  LaserWriter 8 routines, but elsewhere Apple strongly implies the  LaserWriter 8 change is all about OpenType fonts for such  programs. CUPS was revised in 10.2.5, though, and perhaps this  change is only now getting documented, though it would be pretty  underhanded of Apple to imply an older change is actually a  newer one.**That's all**  That's the sum total of Mac OS X 10.2.6, and honestly, that's  enough for a bug fix update. Monthly updates of more than 30MB  are not only amazingly difficult on the 70% of US Internet users  that connect via dial-up, they change so much of the system with  so little documentation that careful professionals can hardly  know what they're getting into with each revision.  Alas, this hasn't stopped a lot of fascinating but ultimately  silly speculation. For example, MacFixIt readers have said [12]  that the update makes Adobe FrameMaker display white space  instead of gray space at the beginning and end of documents.  Although it's possible this has something to do with the changes  in Mac OS X's QuickDraw framework, FrameMaker is a Classic  application, and Classic did not change.  [12] <http://www.macfixit.com/article.php?story=20030509064645537&pid=0&type=article>  The site also had extensive descriptions [13] of "changes"  between Address Book 3.0.3 (v224) in Mac OS X 10.2.5 and Address  Book 3.0.3 (v225) in Mac OS X 10.2.6, including new editing  features. But remember: there are no code-level changes in  Address Book or its framework. None. The only changes are to  modem strings and files that determine the version numbers. It's  quite impossible for the update to provide the kinds of changes  MacFixIt describes.  [13] <http://www.macfixit.com/article.php?story=20030508084651448>  There's also some confusion circulating about whether there's a  difference between applying the smaller updater or the  mega-combo updaters that work on any Jaguar system. MWJ_ and  MacFixIt reader Philip Tejada applied each kind of updater to an  "identical copy of [Mac OS X] 10.2.4" on two partitions, and  when done, found "over 2800 files different on the two systems  after the updates." MacFixIt used this as support for its recent  and oft-repeated contention that you're better off using the  Combo updaters than the smaller updaters designed for the  just-prior version of the system software.  However, Tejada copied MDJ_ on his findings, and MacFixIt  extensively misquoted [14] him. First, Tejada was trying to  track down the crashing bug in Microsoft's UAM that Apple's  server notes now admit was introduced in Mac OS X 10.2.5. For  Tejada, the problem only appeared on systems that used the  MacFixIt-recommended "Combo" updater, _not_ the individual  10.2.4 to 10.2.5 updater. Secondly, Tejada's experiment was in  updating 10.2.4 to 10.2.5, not 10.2.5 to 10.2.6.  [14] <http://www.macfixit.com/article.php?story=20030507074551748>  MacFixIt actually changed his text to say he worked on "two  identical partitions with an identical copy of 10.2.5 on each,"  when Tejada's message says he worked on "two identical  partitions with an identical copy of 10.2.4 on each," applying  the _10.2.5_ updaters. Not only that, MacFixIt changed Tejada's  words to support the site's "Combo" update recommendations when  Tejada's experiment clearly showed the "Combo" updater caused  his problem. Given this pretty much inexcusable misquoting of  Tejada to support its preconceptions, it's now difficult to take  anything MacFixIt says about "Combo" updates seriously.  That doesn't answer Tejada's question, and to be honest, we're  not sure of the total answer. Particularly, we're following up  on how his original 10.2.4 system was created: the differences  file shows that it did not have some standard parts of Mac OS X  10.2 installed on it before the updaters were applied, such as  iChat. The Combo updater contains an updated version of iChat  from Mac OS X 10.2.2 (MDJ_ 2002.11.26), but the Mac OS X 10.2.5  updater does not. That explains why the Combo updater writes a  new copy of iChat but the single-version updater does not. We do  not know if iChat is the only standard part of 10.2 that was not  installed on Tejada's systems, nor how that would affect the  installer.  We're not completely surprised by different system binaries  after two different updates because one of Mac OS X's primary  performance mechanisms, prebinding [15], changes binary code  files. Many of the files marked different in Tejada's experiment  are prebound binaries, so the Installer's "Optimizing System  Performance" pass could easily have changed those binaries. In  Mac OS X 10.2, the system may also update a file's prebinding on  its own for performance reasons. Since the results of prebinding  depend on the libraries any binary code needs, which may depend  on other binaries or applications, and so on, the results are  somewhat unpredictable on an individual basis. If Tejada's  system was missing some libraries from 10.2 that the Combo  installer added but the individual 10.2.5 update did not, it  could have affected many prebound code files.  [15] <http://developer.apple.com/tools/projectbuilder/Prebinding.html>  Tejada's systems had many non-binary differences as well. Some  well-meaning MacFixIt readers said these were probably  permission problems, but Tejada used the diff command, and diff  only compares file contents. It does not flag two files as  different if their contents are the same but permissions differ.  The differences Tejada found could depend on the composition of  the reference 10.2.4 systems he updated; we're attempting to  follow up on that.  At the moment, we've seen nothing that makes us reluctant to  recommend either updater, with the choice depending on your  needs. If you're running Mac OS X 10.2.5, use the 6MB updater.  If you're running an older version, use the 103MB "Combo"  updater. Mac OS X 10.2.6 fixes a small set of annoying bugs in  Mac OS X 10.2.5, and does so quickly and without confusing us  too much. We approve.-----------------------------------------------------------------  MDJ_, The Daily Journal for Serious Macintosh[tm] Users, is  published by GCSF, Incorporated.  Publisher:           Matt Deatherage    <mattd@macjournals.com>  Staff:               Justin Seal       <justin@macjournals.com>                       Nathaniel Irons    <irons@macjournals.com>                       John C. Welch     <jwelch@macjournals.com>                       Jerry Kindall    <kindall@macjournals.com>                       John Gruber       <gruber@macjournals.com>  Copyright (c) 2003 GCSF, Incorporated.  All rights reserved.  All trademarks are the property of their respective holders  and owners.  The symbol **[D]** indicates potential conflicts of interest,  but for readability, the necessary disclaimer has been omitted  from the text. Such disclaimers may be found online at  <http://www.macjournals.com/disclaimers.html>.  MDJ_ contains news, information, strong opinion, parody, biting  sarcasm, and things you need to know.  Those easily offended  should seek information elsewhere.  Humans often answer the telephone between 10 AM and 6 PM Central  (US) Time, Monday through Friday. Voicemail is available at any  hour.  This file is formatted as setext.  For more information, send  email to <setext@tidbits.com>.  A file will be returned shortly.  It is also digitally signed using PGP technology to verify the  integrity of the transmission.    Our DH/DSS corporate PGP key maybe obtained at  <http://www.macjournals.com/pages/gcsf/gcsf_keys.html#Anchor-GCSF_DSSKey>.    GCSF, Incorporated.  P.O. Box 1021  El Reno, OK  73036-1021  (405) 262-1399  <mdj@macjournals.com>-----BEGIN PGP SIGNATURE-----Version: PGP 8.0.2iQA/AwUBPsBgprH4QMSEyVHCEQKpGwCgpauRvUGQZe/H8Z/EKmBCJ+3fQnoAoPsbLkF1eMKA6uILF4Xm1OYf4QGe=xeyr-----END PGP SIGNATURE-----