Return to BSD News archive
Path: euryale.cc.adfa.oz.au!newshost.anu.edu.au!harbinger.cc.monash.edu.au!news.rmit.EDU.AU!news.unimelb.EDU.AU!munnari.OZ.AU!news.ecn.uoknor.edu!news.ysu.edu!usenet.ins.cwru.edu!gatech!swrinde!howland.reston.ans.net!newsfeed.internetmci.com!in2.uu.net!news.artisoft.com!usenet From: Terry Lambert <terry@lambert.org> Newsgroups: comp.os.linux.development.system,comp.unix.bsd.freebsd.misc Subject: Re: Ideal filesystem Date: Tue, 16 Apr 1996 15:05:14 -0700 Organization: Me Lines: 244 Message-ID: <3174199A.7837FA99@lambert.org> References: <4hptj4$cf4@cville-srv.wam.umd.edu> <4kfoqd$dgs@coyote.Artisoft.COM> <DpvCB7.xn@midway.uchicago.edu> <31719AE4.7EAF32DF@lambert.org> <Dpx5xn.DB5@midway.uchicago.edu> NNTP-Posting-Host: hecate.artisoft.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Mailer: Mozilla 2.01 (X11; I; Linux 1.1.76 i486) Xref: euryale.cc.adfa.oz.au comp.os.linux.development.system:21632 comp.unix.bsd.freebsd.misc:17562 Christopher Jeris wrote: ] ] Ok, try the following semantics on for size. They're probably ] equipotent with, or a slight extension of, something that ] already exists in the common UNIX fs---but I'm not sure that ] the best criterion for judging an experimental concept is ease ] of implementation in terms of existing concepts. Here, here! ] I think something with some of the characteristics of personal ] views and registries can be built, and made to support "nomadic ] computing", relatively easily. Again, I apologize if I'm ] rehashing concepts which are already taken for granted by ] everyone. It's not taken for granted by everyone, or they wouldn't be trying to pound it all into the same shape of sack they've always used. [ ... description of n-connectedness in set relationships elided ... ] ] Objection: Why make this alternation? You can build a structure that ] quacks just like this one with ordinary files and directories. ] ] Answer: We make a distinction between data objects which can ] stand on their own and those which can't. Ideally I would like ] every data object which might ever be copied or transferred by ] itself to be able to identify itself, explain its origin, ] format and purpose. Thus forks: at the level of file ] operations (as opposed to running programs I guess---it would ] be clumsy to demand an extensive ID attachment to every ] intermediate-computation squirt?) a fork may not be transferred ] alone. They are elements of file structure which are worth ] isolating a little, but not a lot. Yes, yes, yes! ] Of course this *can* be implemented by writing utilities to ] run on top of a UNIX file system (and I'll probably do that ] to test these concepts out) but that isn't the point, I think. Exactly. The point is a unified API which must be used by every application at the user/FS (kernel) interface level. If it is possible for me to subvert this with an assembler and knowlege of the source code for the OS, then it is not possible to rely on it: the host synchronization issues impede this type of approach: you are left with the same problems as a hosted file system for a network server when you have local users on the server at the same time. Further, if we want to tag things to FS events, the events *must* be in kernel space. One example is a user space directory browser. We want the browser to recieve notification when the directory contents have changed so that it can update the view onto the directory for the user. Another example is a file which has event flags set by another file as a result of a compound document architecture implementation; two exmaples are a spreadsheet with overall budget derived from the encapsulation of departmental budgets, which in turn derive from workgroup budgets. Another example is a company "policy and procedures" manual which is always up-to-date because changes in departemental policy are immediately reflected in the overall manual. NeXT called such object "Live Links". ] * We distinguish "views" or "privilege levels", to which the ] closest thing in UNIX may be the user id, but a given user may ] possess several and be able to switch between them. I'm not ] really sure what to call them because they can be used both as ] views and as privilege restrictions. Each file has associated ] with it a mapping of view/user ids to privileges, of which one ] is *visibility*. The file may, if desired, inherit its privilege ] map (with modifications or not) from its group. Inheritance is atricky issue. A group-based scheme can not handle issues of both forward and reverse inheritance without propagating "implied priveledge records". It is very usage dependent as to how fast this would grow to be computationally unmanageable. One example of forward inheritance is the "read-only" mount attribute, which is inherited below the mountpoint. We could easily envision apply this on a non-mount-point directory and having it inherited down. Now say the same directory hierarchy used a reverse inheritance exception model (ie: NetWare Trustees, for example). NetWare trustee rights imply access to parent objects through reverse inheritance. In such a forward inheritance group scheme, it would be impossible to determine user rights to any given intermediate FS object in the hierarchy without exhaustively iterating all inferior nodes in the hierarchy at any point in the hierarchy. This is analogous to the "path hashing" problem discussed previously, except that it is not an order 2 geometry -- it's an order N geometry. Reverse inheritance of rights identifiers for implied rights to objects ("you can see this directory because you can see some object inferior to this directory") requires that the act of right inheritance propagation be tightly bound to the event establishing or destroying the rights chain. If you delete the file, or change the rights on it, the event must be handled as a transaction -- NOT in user space. A traditional presentation is not capable of yielding seperate records for implied and explicit rights in a combined inheritance model -- only a combined rights mask... which is insufficient for rights manipulation, only sufficient for rights enforcement. Further, a user space library for manipulation of this particular attribution can not guarantee atomicity in the transaction, when the transaction on the file itself implies subsequent transactions all the way to the FS root. Finally, the per-rights overhead in supplying access controls to the rights themselves makes the records much larger than necessary (or desirable: each incremental increase in storage size for an atribute is multiplied by the depth in the overall hierarchy in an implied inheritance scheme). ] Then, when they call support, one can tell them "Okay, switch ] to the <System Maintenance> view, and do this and this and ] this," and if they have messed with the almighty System ] Maintenance view then on their heads be it. Yes. There is a need for view cannonization, and it is expected that the applications themselves must operate within the cannonical view to avoid the user's view damaging their ability to function. Because the user can not see the configuration file does not mean that the application will have the same restriction. For this reason, I really believe the concept of "personal view" to be a shell or visual browser abstraction, not any real storage artifact of any kind. ] Obviously you would have to be careful to see that all their ] customizations are not smacked by the changes you make from ] the Maintenance view. Trancendentality of links. 8-). For instance, if I move the system configuration file, and it is visible to my view, my view won't change even though the location of the view target has. ] When a file or bunch of files is transferred, the copy agent ] fixes up all the references, asking for help if necessary--- ] sort of like linking a program. This seems to confer the ] ability for nomadic computing, at least between trusted ] machines: just ask someone else to serve you a given group, ] fix up all the links, and go. For security perhaps you could ] save long characteristic values for all the "big stuff you're ] not going to take with you," and compare yours with theirs. ] ] Objection: Too much meta-data. ] ] Answer: Well, yeah, I guess. But transparently migrating ] structured data across physical systems just seems to require ] a lot of meta-data and relative ] reference to me. Careful. I believe self-consistency to be an issue for the application programmer to resolve (hopefully with library support, if necessary). The danger in making the "exporter/importer" resolve conflicts is the same human intervention problem which made niload/nidump a bad idea on NeXT systems. If a machine can synchronize two sets of dependent information, it should do so instead of causing a human to do it. A FS event of "password file has changed" could have easily been implemented in NeXTStep to cause the "niload" to occur automatically. ] * Finally, the concept of registries was what inspired this ] whole thing for me---all you have to do is create well-defined ] top- or near-top-level groups, like "Binaries" and "SystemConfig" ] and the like; then whenever you install a program make the ] binary a member of "Binaries" and so on. Just like a link in ] UNIX, really, except that when the file is destroyed elsewhere ] (say you execute "destroy Emacs" to kill the whole Emacs group) ] it vanishes from everywhere, rather than the link being broken ] in one place but remaining in another. No mess, no fuss. One ] can then transparently maintain subgroups within "Binaries", ] say "Admin" for system administration and stuff, so that it's ] still "Binaries:reboot" to everyone, but inaccessible or ] invisible to everyone who doesn't have access to "Binaries:Admin". ] This would be done by putting a cookie in reboot's Info fork ] saying not "Inherit privileges from accessing group", but ] absolutely "Inherit privileges from Binaries:Admin, of which I ] am a member", and then in Binaries:Admin, saying "Invisible to ] everyone not in group Admin" or some such. This is the Microsoft approach to the resoloution of "the path problem", as discussed previously. It has some merits, but also some drawbacks. It seems to me that you could get near-identical capabilities with system, group, and session logical names, in combination with variant symbolic links. One example of this is the idea "default GIF viewer" when you delete the user's choice off the system. Typically, you would *not* want to remove the broken link; instead you would want to cause access to the broken link to trigger a "new link selection". You could call "GIF viewers" a group if you wanted, in this context, but it seems to be one level of abstraction above what you were using as "group". The cookies would not be necessary because of the inheritance rules for logical names. The drawbacks in the Microsoft implementations as they currently exist is that there is still "promiscuous" (or "loose host binding") access availabel to delete resource out from under the registry. There is also no concept of system, group, and user registries -- only system, and there is no protection on its use. Personally, I'll probably stick to implementing the foundation technologies on which abstract groups, inherited rights, reverse inherited rights, and low cost attributes for FS objects can be implemented. When you start imposing structure, you start limiting choices (like the structure of file-as-directory does). Regards, Terry Lambert terry@lambert.org --- Any opinions in this posting are my own and not those of my present or previous employers.