The reason is simple. Shared are /usr etc is on local zones read only. So to update something there we first update it in global zone - which is same as for real system and we doing it in right dependency order.
After this all real data in /usr area will be already updated and effectively shared over local zones. But it will not be registered in local zone package registry - contents file. To do this we proceed with patching each local zone with list of patches in right order where all global patches also will be present. In addition we provide for each of this patchadd command list of read-only filesystems (where /usr etc will be listed). Pkgadd (it is done on package level) will refer to this list and instead of copying files will check are they same as expected and then update registry accordingly, as they was just installed. If we will patchadd global zone last, then all shared patches will not be present and so may not satisfy dependency for some of local zone patches. This is the reason why we can not patch global zone last. I will explain it later in more details. vassun This message posted from opensolaris.org
