Path: utzoo!mnetor!uunet!husc6!bloom-beacon!athena.mit.edu!wesommer From: wesommer@athena.mit.edu (William Sommerfeld) Newsgroups: comp.sys.apollo Subject: Re: NCS vs NFS+rpc (In English, this time..) Message-ID: <4481@bloom-beacon.MIT.EDU> Date: 9 Apr 88 06:30:24 GMT References: <7075@etlcom.etl.JUNET> <3b57a3de.13422@apollo.uucp> Sender: daemon@bloom-beacon.MIT.EDU Reply-To: wesommer@athena.mit.edu (William Sommerfeld) Organization: Massachusetts Institute of Technology Lines: 79 Keywords: NCS NFS RPC XDR Sun Summary: Sorry, I don't speak Japanese. In article <3b57a3de.13422@apollo.uucp> mishkin@apollo.UUCP (Nathaniel Mishkin) writes: >>[2] NCS vs NFS+rpc >> >>What is the difference of NCS and the combination of NFS (Network >>File System) with rpc (remote procedure call)? >>Which is more powerful and easy to builtin to application programs? > >Obviously, I'm biased, but I think it's pretty clear that as a suite of >tools for developing distributed applications (especially ones with >demands more complicated than distributed file system applications >tend to have), NCS is both more powerful and easy to use. The features >of NCS were described in a paper in the Summer '87 Usenix. \begin{disclaimer} I may be marginally biased, as I will start working for Paul Leach (Nat's boss) in July (assuming I get my thesis done ;-)). I have not done any work on any Apollo systems (well, I did type a few commands on one of their machines at their recruiting open house..), but am starting to use NCS on BSD4.3 unix on a microVAX. I'm only reading this newsgroup to try to get a feel for what I just committed myself to.. \end{disclaimer} I have looked at both Sun RPC/NFS and Apollo NCS sources. I wish I had seen NCS about a year ago; it would have saved me the effort of writing my own pseudo-RPC system for a major project I worked on last summer. Sun RPC just did not have the functionality for what I was trying to do (like the ability to allow the server to call back to the client while the client is waiting for a response from the server). Given the choice between using raw UDP datagrams and using SunRPC, I'd rather use raw UDP, because I could do a better job; I would not say the same about NCS. I was not impressed by the quality of Sun NFS or RPC. Well, SunRPC works (sort of) if you don't push it too hard. It appears that Apollo's staff understands the ideas of _modular progamming_ and _clean interfaces_ a lot better than Sun's staff does---library routines should NOT call fprintf(stderr, ...) and then abort() (or panic() in the case of kernel routines) in the event of errors. NCS also gives you a much richer programming environment; in the UNIX distribution, you get a simple exception handling package of sorts layered on setjmp()/longjmp() which lets you unwind the stack cleanly in the presence of failures, a timer manager package, etc. I heard some talk of eventually providing a semi-portable version of the tasking code. On the down side for NCS (trying to be fair here): NCS isn't bug-free; the interface compiler (or at least the version I was playing with) does seem to need a bit of work in its error recovery, and has choked on a few of the twisted things I've tried to feed it (but I can name C compiler products which choke on much more mundane inputs). Source is reportedly quite expensive if you aren't an educational institution, although the charge to universities (a $50 tape-handling fee?) is about right. The identifier naming conventions are unusual for UNIX (but look real familiar to anyone who ever did any programming on Multics..). If you have a strong revulsion to the use of the `$' character in identifiers (possibly caused by a bad reaction to MIT's killer software engineering courses ;-) ), this may be an issue. This also causes problems with overly pedantic ANSI C compilers like MetaWare's Hawaiian Punch (um, High C) compiler: it seems to treat `$' as `begin comment'. The distribution does contain a hacked version of the DECUS cpp which strips out the `$'s. If you're familiar with UNIX, the documentation is a little confusing on the first pass until you build a mental translation table; they seem to use the term `system call' for things which (in the UNIX world) are implemented as library functions, and the documentation refers to C functions as `procedures'. Oh well, back to the thesis... - Bill Sommerfeld wesommer@athena.mit.edu