Radsoft
 About | Buy | News | Products | Rants | Search | Security
Home » Rants

Apple File Systems

Totally their own.


Get It

Try It

Apple were struck 29 March with another scandal in their speckled history of file system technology when it was discovered yet again - it's not the first time - file moves across volume boundaries can not only trip over their own feet but also can destroy the contents of the source.

To be honest it's not the 'rock solid foundation' used as the underbody of their OS X - it's manifest on a completely different level. And singling out the culprit is much much harder.

Unix file management is eminently simple. And according to those we depend on to know its simplicity is its greatest strength. Unix has no intrinsic for copying files - you simply open them, read them, and write what you've read to your destination.

This is a far cry from David Cutler's SHFileOperation for Windows which totally encapsulates all possible requests - and much more. SHFileOperation not only manages file copies, file moves, file deletes, and file renames - it also completely manages the transactions themselves, popping up in a sovereign thread and with intermittent dialog boxes on screen, asking all sorts of intelligent questions - and proceeding flawlessly towards its (and your) objective.

And Cutler did do it right: the code is mercilessly tested; if anything should still and all fail there's but a single point of failure, making things all the easier to remedy.

Unix uses functions for renaming, unlinking, and moving files and takes care of file moves across volume boundaries; but Unix is not a system with a graphical interface. Apple's OS X however is. And Unix uses but one function for each dedicated task - not a thousand.

Yet Apple have no equivalent to Microsoft's SHFileOperation. None.

Instead they have a quilt of an unbelievable number of functions, a number so great and with a functionality so overlapping it's not surprising at all Apple's customers repeatedly experience massive data loss.

High-Level File Operations

FSCopyObjectSync
FSMoveObjectSync
FSPathCopyObjectSync
FSPathMoveObjectSync
FSFileOperationCreate
FSFileOperationCancel
FSFileOperationGetTypeID
FSFileOperationScheduleWithRunLoop
FSFileOperationUnscheduleFromRunLoop
FSCopyObjectAsync
FSMoveObjectAsync
FSPathCopyObjectAsync
FSPathMoveObjectAsync
FSFileOperationCopyStatus
FSPathFileOperationCopyStatus

Accessing Information About Files and Directories

FSGetCatalogInfo
PBGetCatalogInfoSync
PBGetCatalogInfoAsync
FSSetCatalogInfo
PBSetCatalogInfoSync
PBSetCatalogInfoAsync
FSpGetFInfo (Deprecated in Mac OS X v10.4)
FSpSetFInfo (Deprecated in Mac OS X v10.4)
HGetFInfo (Deprecated in Mac OS X v10.4)
HSetFInfo (Deprecated in Mac OS X v10.4)
PBGetCatInfoAsync (Deprecated in Mac OS X v10.4)
PBGetCatInfoSync (Deprecated in Mac OS X v10.4)
PBHGetFInfoAsync (Deprecated in Mac OS X v10.4)
PBHGetFInfoSync (Deprecated in Mac OS X v10.4)
PBHSetFInfoAsync (Deprecated in Mac OS X v10.4)
PBHSetFInfoSync (Deprecated in Mac OS X v10.4)
PBSetCatInfoAsync (Deprecated in Mac OS X v10.4)
PBSetCatInfoSync (Deprecated in Mac OS X v10.4)

Adding to the Desktop Database

PBDTAddAPPLAsync (Deprecated in Mac OS X v10.4)
PBDTAddAPPLSync (Deprecated in Mac OS X v10.4)
PBDTAddIconAsync (Deprecated in Mac OS X v10.4)
PBDTAddIconSync (Deprecated in Mac OS X v10.4)
PBDTSetCommentAsync (Deprecated in Mac OS X v10.4)
PBDTSetCommentSync (Deprecated in Mac OS X v10.4)

Allocating File Blocks

Allocate (Deprecated in Mac OS X v10.4)
AllocContig (Deprecated in Mac OS X v10.4)
PBAllocateAsync (Deprecated in Mac OS X v10.4)
PBAllocateSync (Deprecated in Mac OS X v10.4)
PBAllocContigAsync (Deprecated in Mac OS X v10.4)
PBAllocContigSync (Deprecated in Mac OS X v10.4)

Allocating Storage for Forks

FSAllocateFork
PBAllocateForkSync
PBAllocateForkAsync

Comparing File System References

FSCompareFSRefs
PBCompareFSRefsSync
PBCompareFSRefsAsync

Controlling Directory Access

PBHGetDirAccessSync
PBHGetDirAccessAsync
PBHSetDirAccessSync
PBHSetDirAccessAsync

Controlling Login Access

PBHMapIDSync
PBHMapIDAsync
PBHMapNameSync
PBHMapNameAsync
PBHGetLogInInfoAsync (Deprecated in Mac OS X v10.4)

Converting Between Paths and FSRef Structures

FSRefMakePath
FSPathMakeRef

Copying and Moving Files

PBHCopyFileSync
PBHCopyFileAsync
PBHMoveRenameAsync (Deprecated in Mac OS X v10.4)
PBHMoveRenameSync (Deprecated in Mac OS X v10.4)

Creating a File System Reference (FSRef)

FSMakeFSRefUnicode
PBMakeFSRefUnicodeSync
PBMakeFSRefUnicodeAsync

Creating an FSRef From a File System Specification

FSpMakeFSRef
PBMakeFSRefSync
PBMakeFSRefAsync

Creating and Deleting File ID References

PBCreateFileIDRefSync
PBCreateFileIDRefAsync
PBDeleteFileIDRefSync
PBDeleteFileIDRefAsync

Creating and Deleting Named Forks

FSCreateFork
PBCreateForkSync
PBCreateForkAsync
FSDeleteFork
PBDeleteForkSync
PBDeleteForkAsync

Creating Directories

FSCreateDirectoryUnicode
PBCreateDirectoryUnicodeSync
PBCreateDirectoryUnicodeAsync
DirCreate (Deprecated in Mac OS X v10.4)
FSpDirCreate (Deprecated in Mac OS X v10.4)
PBDirCreateAsync (Deprecated in Mac OS X v10.4)
PBDirCreateSync (Deprecated in Mac OS X v10.4)

Creating File System Specifications

FSMakeFSSpec (Deprecated in Mac OS X v10.4)
PBMakeFSSpecAsync (Deprecated in Mac OS X v10.4)
PBMakeFSSpecSync (Deprecated in Mac OS X v10.4)

Creating Files

FSCreateFileUnicode
PBCreateFileUnicodeSync
PBCreateFileUnicodeAsync
FSpCreate (Deprecated in Mac OS X v10.4)
HCreate (Deprecated in Mac OS X v10.4)
PBHCreateAsync (Deprecated in Mac OS X v10.4)
PBHCreateSync (Deprecated in Mac OS X v10.4)

Creating, Invoking, and Disposing Universal Procedure Pointers to Completion Functions

NewIOCompletionUPP
DisposeIOCompletionUPP
InvokeIOCompletionUPP

Deleting Entries From the Desktop Database

PBDTRemoveAPPLAsync (Deprecated in Mac OS X v10.4)
PBDTRemoveAPPLSync (Deprecated in Mac OS X v10.4)
PBDTRemoveCommentAsync (Deprecated in Mac OS X v10.4)
PBDTRemoveCommentSync (Deprecated in Mac OS X v10.4)

Deleting Files and Directories

FSDeleteObject
PBDeleteObjectSync
PBDeleteObjectAsync
FSpDelete (Deprecated in Mac OS X v10.4)
HDelete (Deprecated in Mac OS X v10.4)
PBHDeleteAsync (Deprecated in Mac OS X v10.4)
PBHDeleteSync (Deprecated in Mac OS X v10.4)

Determining the Unicode Names of the Data and Resource Forks

FSGetDataForkName
FSGetResourceForkName

Exchanging the Contents of Two Files

FSExchangeObjects
PBExchangeObjectsSync
PBExchangeObjectsAsync
FSpExchangeFiles (Deprecated in Mac OS X v10.4)
PBExchangeFilesAsync (Deprecated in Mac OS X v10.4)
PBExchangeFilesSync (Deprecated in Mac OS X v10.4)

Getting and Setting Volume Information

FSGetVolumeInfo
PBGetVolumeInfoSync
PBGetVolumeInfoAsync
FSSetVolumeInfo
PBSetVolumeInfoSync
PBSetVolumeInfoAsync
GetVRefNum (Deprecated in Mac OS X v10.4)
PBHGetVInfoAsync (Deprecated in Mac OS X v10.4)
PBHGetVInfoSync (Deprecated in Mac OS X v10.4)
PBSetVInfoAsync (Deprecated in Mac OS X v10.4)
PBSetVInfoSync (Deprecated in Mac OS X v10.4)
PBXGetVolInfoAsync (Deprecated in Mac OS X v10.4)
PBXGetVolInfoSync (Deprecated in Mac OS X v10.4)

Getting Information About Volumes

PBHGetVolParmsSync
PBHGetVolParmsAsync

Iterating Over Named Forks

FSIterateForks
PBIterateForksSync
PBIterateForksAsync

Locating, Opening, and Closing the Desktop Database

PBDTCloseDown (Deprecated in Mac OS X v10.4)
PBDTGetPath (Deprecated in Mac OS X v10.4)
PBDTOpenInform (Deprecated in Mac OS X v10.4)

Locking and Unlocking File Ranges

PBLockRangeAsync (Deprecated in Mac OS X v10.4)
PBLockRangeSync (Deprecated in Mac OS X v10.4)
PBUnlockRangeAsync (Deprecated in Mac OS X v10.4)
PBUnlockRangeSync (Deprecated in Mac OS X v10.4)

Locking and Unlocking Files and Directories

FSpRstFLock (Deprecated in Mac OS X v10.4)
FSpSetFLock (Deprecated in Mac OS X v10.4)
HRstFLock (Deprecated in Mac OS X v10.4)
HSetFLock (Deprecated in Mac OS X v10.4)
PBHRstFLockAsync (Deprecated in Mac OS X v10.4)
PBHRstFLockSync (Deprecated in Mac OS X v10.4)
PBHSetFLockAsync (Deprecated in Mac OS X v10.4)
PBHSetFLockSync (Deprecated in Mac OS X v10.4)

Manipulating File and Fork Size

FSGetForkSize
PBGetForkSizeSync
PBGetForkSizeAsync
FSSetForkSize
PBSetForkSizeSync
PBSetForkSizeAsync
GetEOF (Deprecated in Mac OS X v10.4)
PBGetEOFAsync (Deprecated in Mac OS X v10.4)
PBGetEOFSync (Deprecated in Mac OS X v10.4)
PBSetEOFAsync (Deprecated in Mac OS X v10.4)
PBSetEOFSync (Deprecated in Mac OS X v10.4)
SetEOF (Deprecated in Mac OS X v10.4)

Manipulating File Position

FSGetForkPosition
PBGetForkPositionSync
PBGetForkPositionAsync
FSSetForkPosition
PBSetForkPositionSync
PBSetForkPositionAsync
GetFPos (Deprecated in Mac OS X v10.4)
PBGetFPosAsync (Deprecated in Mac OS X v10.4)
PBGetFPosSync (Deprecated in Mac OS X v10.4)
PBSetFPosAsync (Deprecated in Mac OS X v10.4)
PBSetFPosSync (Deprecated in Mac OS X v10.4)
SetFPos (Deprecated in Mac OS X v10.4)

Manipulating the Default Volume

HGetVol (Deprecated in Mac OS X v10.4)
HSetVol (Deprecated in Mac OS X v10.4)
PBHGetVolAsync (Deprecated in Mac OS X v10.4)
PBHGetVolSync (Deprecated in Mac OS X v10.4)
PBHSetVolAsync (Deprecated in Mac OS X v10.4)
PBHSetVolSync (Deprecated in Mac OS X v10.4)

Manipulating the Desktop Database Itself

PBDTDeleteAsync (Deprecated in Mac OS X v10.4)
PBDTDeleteSync (Deprecated in Mac OS X v10.4)
PBDTFlushAsync (Deprecated in Mac OS X v10.4)
PBDTFlushSync (Deprecated in Mac OS X v10.4)
PBDTGetInfoAsync (Deprecated in Mac OS X v10.4)
PBDTGetInfoSync (Deprecated in Mac OS X v10.4)
PBDTResetAsync (Deprecated in Mac OS X v10.4)
PBDTResetSync (Deprecated in Mac OS X v10.4)

Mounting Remote Volumes

PBGetVolMountInfoSize
PBGetVolMountInfo
PBVolumeMount

Moving and Renaming Files or Directories

FSMoveObject
PBMoveObjectSync
PBMoveObjectAsync
FSRenameUnicode
PBRenameUnicodeSync
PBRenameUnicodeAsync
CatMove (Deprecated in Mac OS X v10.4)
FSpCatMove (Deprecated in Mac OS X v10.4)
FSpRename (Deprecated in Mac OS X v10.4)
HRename (Deprecated in Mac OS X v10.4)
PBCatMoveAsync (Deprecated in Mac OS X v10.4)
PBCatMoveSync (Deprecated in Mac OS X v10.4)
PBHRenameAsync (Deprecated in Mac OS X v10.4)
PBHRenameSync (Deprecated in Mac OS X v10.4)

Obtaining File and Directory Information Using a Catalog Iterator on HFS Plus Volumes

FSGetCatalogInfoBulk
PBGetCatalogInfoBulkSync
PBGetCatalogInfoBulkAsync

Obtaining File Control Block Information

PBGetFCBInfoAsync (Deprecated in Mac OS X v10.4)
PBGetFCBInfoSync (Deprecated in Mac OS X v10.4)

Obtaining Fork Control Block Information

FSGetForkCBInfo
PBGetForkCBInfoSync
PBGetForkCBInfoAsync

Opening and Closing Catalog Iterators

FSOpenIterator
PBOpenIteratorSync
PBOpenIteratorAsync
FSCloseIterator
PBCloseIteratorSync
PBCloseIteratorAsync

Opening Files

FSOpenFork
PBOpenForkSync
PBOpenForkAsync
FSpOpenDF (Deprecated in Mac OS X v10.4)
FSpOpenRF (Deprecated in Mac OS X v10.4)
HOpen (Deprecated in Mac OS X v10.4)
HOpenDF (Deprecated in Mac OS X v10.4)
HOpenRF (Deprecated in Mac OS X v10.4)
PBHOpenAsync (Deprecated in Mac OS X v10.4)
PBHOpenDFAsync (Deprecated in Mac OS X v10.4)
PBHOpenDFSync (Deprecated in Mac OS X v10.4)
PBHOpenRFAsync (Deprecated in Mac OS X v10.4)
PBHOpenRFSync (Deprecated in Mac OS X v10.4)
PBHOpenSync (Deprecated in Mac OS X v10.4)

Opening Files While Denying Access

PBHOpenDenySync
PBHOpenDenyAsync
PBHOpenRFDenySync
PBHOpenRFDenyAsync

Reading the Desktop Database

PBDTGetAPPLAsync (Deprecated in Mac OS X v10.4)
PBDTGetAPPLSync (Deprecated in Mac OS X v10.4)
PBDTGetCommentAsync (Deprecated in Mac OS X v10.4)
PBDTGetCommentSync (Deprecated in Mac OS X v10.4)
PBDTGetIconAsync (Deprecated in Mac OS X v10.4)
PBDTGetIconInfoAsync (Deprecated in Mac OS X v10.4)
PBDTGetIconInfoSync (Deprecated in Mac OS X v10.4)
PBDTGetIconSync (Deprecated in Mac OS X v10.4)

Reading, Writing, and Closing Files

FSReadFork
PBReadForkSync
PBReadForkAsync
FSWriteFork
PBWriteForkSync
PBWriteForkAsync
FSCloseFork
PBCloseForkSync
PBCloseForkAsync
FSClose (Deprecated in Mac OS X v10.4)
FSRead (Deprecated in Mac OS X v10.4)
FSWrite (Deprecated in Mac OS X v10.4)

Resolving File ID References

PBResolveFileIDRefSync
PBResolveFileIDRefAsync

Searching a Volume

PBCatSearchAsync (Deprecated in Mac OS X v10.4)
PBCatSearchSync (Deprecated in Mac OS X v10.4)

Searching a Volume Using a Catalog Iterator

FSCatalogSearch
PBCatalogSearchSync
PBCatalogSearchAsync

Unmounting Volumes

PBUnmountVol (Deprecated in Mac OS X v10.4)
UnmountVol (Deprecated in Mac OS X v10.4)

Updating Files

FSFlushFork
PBFlushForkSync
PBFlushForkAsync
PBFlushFileAsync (Deprecated in Mac OS X v10.4)
PBFlushFileSync (Deprecated in Mac OS X v10.4)

Updating Volumes

FlushVol
PBFlushVolSync
PBFlushVolAsync

Miscellaneous

DisposeFNSubscriptionUPP
DisposeFSVolumeEjectUPP
DisposeFSVolumeMountUPP
DisposeFSVolumeUnmountUPP
FNGetDirectoryForSubscription
FNNotify
FNNotifyAll
FNNotifyByPath
FNSubscribe
FNSubscribeByPath
FNUnsubscribe
FSCancelVolumeOperation
FSCopyDiskIDForVolume
FSCreateVolumeOperation
FSDisposeVolumeOperation
FSEjectVolumeAsync
FSEjectVolumeSync
FSGetAsyncEjectStatus
FSGetAsyncMountStatus
FSGetAsyncUnmountStatus
FSMountLocalVolumeAsync
FSMountLocalVolumeSync
FSMountServerVolumeAsync
FSMountServerVolumeSync
FSUnmountVolumeAsync
FSUnmountVolumeSync
InvokeFNSubscriptionUPP
InvokeFSVolumeEjectUPP
InvokeFSVolumeMountUPP
InvokeFSVolumeUnmountUPP
NewFNSubscriptionUPP
NewFSVolumeEjectUPP
NewFSVolumeMountUPP
NewFSVolumeUnmountUPP

Not Recommended

This section lists functions that are not recommended and you should no longer use.

PBGetForeignPrivsAsync (Deprecated in Mac OS X v10.4)
PBGetForeignPrivsSync (Deprecated in Mac OS X v10.4)
PBGetUGEntryAsync (Deprecated in Mac OS X v10.4)
PBGetUGEntrySync (Deprecated in Mac OS X v10.4)
PBGetXCatInfoAsync (Deprecated in Mac OS X v10.4)
PBGetXCatInfoSync (Deprecated in Mac OS X v10.4)
PBHGetLogInInfoSync (Deprecated in Mac OS X v10.4)
PBSetForeignPrivsAsync (Deprecated in Mac OS X v10.4)
PBSetForeignPrivsSync (Deprecated in Mac OS X v10.4)
PBShareAsync (Deprecated in Mac OS X v10.4)
PBShareSync (Deprecated in Mac OS X v10.4)
PBUnshareAsync (Deprecated in Mac OS X v10.4)
PBUnshareSync (Deprecated in Mac OS X v10.4)

This compared to the half dozen in Unix and the single SHFileOperation in Windows. It's no wonder things get as screwed up as they do. And yet this is only the beginning.

A casual look at the above API list demonstrates that the design of the file system itself is totally off the map. There are not only too many ways to do the same thing - there are also way too many things to be able to do.

A great number of these APIs are today deprecated but hundreds still remain. To what purpose?

It'd be bad enough if all these hundreds of APIs somehow devolved down into the same Unix APIs but that's not the case either. And to explain how that works one must first explain a bit more about how Apple's OS X itself works in general.

Once Upon a Time

A long time ago, somewhere back in the mid 1980s, a company called NeXT Computer formed in Redwood City California. The company produced computer hardware and computer software. The computer software included a graphical interface atop FreeBSD Unix. The graphical interface was called NeXTSTEP.

The relationship between NeXTSTEP and FreeBSD was simple: to the extent the former offered APIs into the file system these APIs were resolved in the FreeBSD layer. There was a single layer of interaction and the overall feel was 'simple - and elegant'.

There was no way to circumvent the FreeBSD file system API. There was no quilt.

As time went on NeXT Computer found it difficult to sell their computer hardware and so changed their name to NeXT Software and marketed their NeXTSTEP as OPENSTEP - a graphical layer running atop not only FreeBSD but SunOS, HP-UX, and even Windows.

When Apple teetered close to bankruptcy in 1996 and then Apple CEO Gil Amelio realised Apple engineers proved incapable of writing their own 32-bit operating system Amelio negotiated with NeXT Software to buy their OPENSTEP and their engineers. He paid $429 million.

Amelio's plan was to keep OPENSTEP as is - and to attempt to hold onto NeXT's growing corporate client portfolio. This proved difficult as most of NeXT's corporate clients shunned Apple. But Amelio still wanted to market OPENSTEP as before - and use NeXT's hardware engineers to build system agnostic computers for all possible operating systems.

Amelio's plans were dashed on the 4 July weekend 1997 when former NeXT CEO Steve Jobs pulled off a coup against Amelio. He dumped all his stock on NASDAQ, then declared before the Apple board he had no confidence in Amelio, then offered to assume CEO leadership of Apple for $1 per annum.

The Apple board accepted.

Hodgepodge

Steve Jobs always talked about 'the whole banana' and found it impossible - or at least uncomfortable - to work with 'open systems'. At the same time Apple's legacy third party developers had waited a long time for the 32-bit transition and had presumed they'd be able to use the same APIs as before.

[But looking at the above API list you wonder why they'd want to. Ed.]

And endemic to maintaining legacy core APIs was retaining the same file system: HFS or 'hierarchical file system'.

Apple's HFS (or HFS Plus in its 32-bit incarnation) is curious - and rather unique - in that it is one of the few file systems ever that is diametrically incompatible with Unix. Apple engineers bent over backwards to bend their HFS to accommodate Unix needs. They achieved partial success.

Third party developers booed Apple at the suggestion the old should be totally tossed out in favour of the new. The new represented a far better way to create software - a far more streamlined and flaw free method - and the learning curve for this new technology was about as easy as a learning curve had ever been - but the Apple third party developers still didn't want anything to do with it.

After chief software architect Avie Tevanian suggested morosely they instead write their own new operating system instead the engineers bucked down and put together what AnandTech have called a 'hodgepodge'. Apple bent certain Unix APIs to fit their needs, preserved parts of their old 16-bit 'MacOS' to placate the third party developers, and ported their old 'MacOS' system code to 32-bit to afford the third party developers a smooth and relatively painless transition.

And in order to maintain control over it all they built several of their system tools not with the new streamlined Unix API but with the old confused 'MacOS' one.

That was ten years ago. The Rixstep site has currently 152 links at Google search for articles about HFS and the issues it's caused. Nothing much has changed in those ten years.

Present Day

Reports of what's going on with this latest gaffe vary. Most narratives assume use of Apple's 'Finder' (the resident OS X file manager) which is starting to blow fuses, flash lights, and lose user data yet again.

A similar scare story emerged when the latest version of OS X Leopard was released recently. Administrators found themselves losing massive amounts of data when attempting transports across network connections. Apple seemed to react and a fix was promised. Now it seems Apple treated the symptoms but not the disease.

And were it a simple matter of checking the Unix source there'd hardly be an issue. Unix isn't going to provide a single point of failure as Windows but five or six possible points isn't that much to overcome.

But several hundred?

And had Apple not gone along with the idea to create a 'hodgepodge' where previously NeXT had enjoyed a clean, simple, and elegant interface (with a far better file system) none of this could have happened.

Apple's own 'MacOS' APIs are able to cut under Unix file system APIs as Apple are not really running a Unix file system at all - they're only supporting the illusion of one.

Third party Unix applications are ironically dependent on the quality of Apple's old 'MacOS' code. And that's not a comforting thought at all.

There should be no way for user level file system requests to go anywhere but to the system that's supposed to be supported. With Apple's file system you never know where your code ends up.

And with the level of debilitating complexity Apple choose to keep about - and over a period of more than ten years - it's not likely they'll sort out this mess either.

The Security Angle

It's relatively easy to maintain security on an open source system like Unix: all the code is out in the open and in the case of Unix and its derivatives it's been out there a long time. It's been tried, tested, and vetted for years.

And as long as higher level code is forced to go through the basic system the only place you need to worry about security is in that lower (Unix) system.

Microsoft screwed up here years ago when they were still trying to win the browser war. Their Internet Explorer version 4 routed past the application interface and went straight to the driver level. Otherwise innocent bloopers such as appending a dot ('.') to a URL could crash the entire operating system.

The golden rule of the secure system is you don't have multiple interfaces and you can't hop over your neighbours.

User » Application » API » Kernel » Drivers » Hardware

Users shouldn't be able to access the APIs directly; applications should only be able to access the API and not the kernel and not the drivers and not the hardware; and so forth.

As soon as you introduce additional paths down the line you increase the complexity of the system; but you also increase the likelihood you'll be exploited and increase the difficulty in isolating security holes.

Microsoft are in many senses beyond help: their system is not open source (and never will be) and it has way too many APIs that can - for all you know - go anywhere.

But Apple who started with a clean and easily defended architecture have done a lot to catch down to Microsoft. Their kernel is no longer pure FreeBSD; they've interwoven their legacy 'MacOS' code into the kernel; they offer myriad paths to corruption and exploitation.

When things like Apple's massive data loss scandals occur developers and users alike scramble to find the culprit APIs, to try to isolate the bugs, to protect themselves. They have hundreds of APIs to look at and no way of knowing which of them - if any - are at fault.

The current issues centre on Apple's file manager 'Finder'; but what APIs does Finder use? It doesn't use the OPENSTEP APIs for file management - it still uses the deprecated 'MacOS' APIs. But which of them?

And does it matter anyway? 'Finder' isn't open source. Apple will fix it if and when they want to. And so far they haven't seemed to want to. Not enough at any rate.

And until they clean up their system architecture they're not really fixing anything at all.

About | Buy | News | Products | Rants | Search | Security
Copyright © Radsoft. All rights reserved.