Inferno Source Release 98
shawk writes "Vita Nuova today announced that it has obtained the exclusive,
worldwide rights to the Inferno Operating System from Lucent
Technologies' Bell Labs and that it is to publish the Inferno source
code under inexpensive, commercial licence terms. Vita Nuova has also
announced that Lucent Technologies and a UK investor have invested
equity capital into Vita Nuova to develop and market Inferno.
Personal Inferno Subscriptions cost $300 with a 50% discount for
academics and students. Corporate subscriptions cost from $1000 for
five developers. You can order your Inferno boxed set including CD,
programmer's manual and papers today. Full details can be found at the
Vita Nuova."
inferno (Score:1)
--
www.alphalinux.org
Re:"New Ideas" in Inferno (Score:1)
Inferno only runs directly on one architecture: the Dis virtual machine
That's wrong. If you read the documentation you will see that Inferno runs directly on the hardware. It's the applications that run in the VM.
From the website: [Limbo programs are compiled into byte-codes representing instructions for a virtual machine called Dis]
Much like Java applets. It would be more acurate to say that Inferno IS a VM.
"2. Written in Limbo
Most of Inferno was written in a new language called Limbo
From the website: [Inferno is, to the extent possible, written in standard C and most of its components are independent of the many operating systems that can host it.]
Again, it's the applications that are written in Limbo, not the OS. Limbo compiles into bytecode. The bytecode is executed by a VM. Again, sounds like: Java.
I don't see why one would spend time with this OS that only supports an obscure language. If it had been Java it would have been much more useful.
Breace.
Re:"New Ideas" in Inferno (Score:1)
No. (Score:2)
Rule one: No one talks about the Inchfan.
Rule two: Don't listen to a word I say
Re:Not a Good Idea(tm) (Score:1)
Re:Inferno? Plan9? (Score:1)
Inferno comes from Lucent, which was once Bell Labs. Plan9 comes from AT&T, which Bell Labs was once a subsidiary of.
However, I have looked and found no evidence of a common heritage (beyond both of them being unices).
Re:Too little for too much $$$ (Score:2)
you can do with that what you want. if you want to hack the kernel, port it to a new platform, whatever, then, yes you have to pay your $300 and become a subscriber. but once one person has done that, they can distribute the kernel binaries with no hinderance, and due to the portable nature of inferno, all worked under it will still work under the new version.
if i wasn't involved in inferno development and was stuck under Windows of some description, then i'd get a copy, just for the environment. unix-like shells under NT are ok, but they don't give you that "my whole environment is pliable under my fingers" feel that having a complete environment does.
the beauty of inferno includes the fact that once you've got something in your namespace (and everything, including network connections, is accessed through the namespace) you can transparently export it through any type of datalink, with whatever sort of encryption/authentication you want, and use it as if it was local. i don't know any other system that provides that much flexibility for so little protocol overhead.
Cleanliness vs. Performance. (Score:3)
A) Most operating systems only run one major architecture. Portability is good, but excessive portability at the expense of speed is bad. I think Linux strikes a nice balance in this regard, it uses ugly performance code when it has to, but keeps the whole thing pretty portable. Also, according to the Be developers, "there is no such thing as portable code, only code that has been ported."
B) Everything is not a file! To some extent, it makes sense, but I never understood the whole file concept. Isn't it much simpler to treat everything as a region of memory? So if you are writing a driver, you simply write to regions of memory starting from a base address rather than doing ioctls, which seem to abstract it to much. Also, when stuff like DNS lookups are done through files, isn't it getting a little silly? Isn't it simpler to map closer to the way the software is actually working? Especially in the cases of stuff like DNS lookups which don't totally make sense being treated as a file. Also, doesn't going through the FS create some overhead? In BeOS a region of shared memory (an "area") is simply a region of memory. You get a pointer to it through the create_area() function, and you tell the OS that you're done with it through delete_area(), kind of like malloc() and free(). In kernel 2.4, it is treated as a file mounted at
Re:Embedded OSes. (Score:2)
Re:no (Score:1)
I expect to see them working more closely together now that they have both been made generally available.
Re:Cleanliness vs. Performance. (Score:2)
regions of memory starting from a base address rather than doing ioctls, which seem to abstract it to much.
Well, you could treat your disk as a linear array of blocks, but for all the different things you use it for its convenient to have a hierarchical organization. Trees are very nice because they allow you to handle a large quantity of heterogenous data to potentially organize huge volumes of information in an fractal manner.
Maybe it would be more correct to ask whether you would prefer to organize everything you deal with in a flat address space like a hash table or in a directed, possibly cyclic graph. Maybe there are better abstractions, but if you have to live with one, DCGs are probably a good choice.
Also, when stuff like DNS lookups are done through files, isn't it getting a little silly? Isn't it simpler to map closer
to the way the software is actually working?
No, I think its easier to read the contents of the virtual file "/network/IP/dns/www.slashdot.org" than to learn a custom set of function calls just for DNS. DNS is a critical, but very small part of many programs. It is bad to have a large number of small, critical parts to a program, each with its own idiosyncratic abstraction and needing its own set of mental and software tools. The fact that a mechanism may closely tracks the underlying implementation has no particular virtue -- why provide abstractions at all unless they transform the underlying problem in a significant way? The application programmer typically has no more interest in the underlying design of something like TCP/IP sockets than he does in the physical geometry of his hard disk. It's a necessary evil.
Re:How useful is this? (Score:1)
i dunno whether you're talking about plan 9 or inferno there. plan 9's got a great gui - it just doesn't fit into how our microsoft-warped brains think a GUI should look like.
inferno however... well, the GUI does need a bit of looking at. and i am looking at it! i'm currently working on the window manager, which was written a few years ago in a weekend and hasn't changed much since.
but it's not a big job. applications aren't heavily tied into the look and feel of the GUI, which makes for less bloated apps. the main GUI is based on a variant [vitanuova.com] of tk which means that the underlying GUI code can be changed in one place, and the whole feel of the thing changes. inferno hasn't had any hardcore graphics designers let loose on it, but if it did, believe me, it could look beautiful!
inferno isn't great because of its GUI, but because of what's underneath. look at the lego brick demo for a flavour of what can be done with devices under inferno.
we've got all the manual pages on line, so if you're interested in techie details about the system, you can see them here [vitanuova.com].
Re:"New Ideas" in Inferno (Score:1)
Programs running under Inferno neither know nor care whether they are running natively or hosted on one of these operating systems.
Vita Nuova [vitanuova.com] has an Inferno plug-in for Internet Explorer which allows a Dis (Compiled Limbo) program to run in a window in a web page. The same compiled program can run (without re-compilation) under Inferno on, say Linux, or on one of the web-phones here in the office.
Re:Why is it called inferno? (Score:1)
Re:Embedded OSes. (Score:1)
A perspective on Inferno (Score:1)
Analogies are sometimes useful. If you like the Inferno distribution metaphor then you can implement Styx without subscribing to Inferno, in the same way you can implement http without using Netscape or IE. The Inferno OS provides an environment (both native and hosted) that leverages Styx and provides a complete, simple and scaleable solution for constructing distributed applications.
Re:"New Ideas" in Inferno (Score:1)
Clearly the Dis VM is run inside the kernel. There are two kinds of Inferno kernel. The first kind runs directly on the hardware much like other operating systems - natively. The second, often refered to as a hosted kernel, runs on top of another operating system.
The hosted form is likely to be of interest to new users of Inferno. It runs as an application on, amongst others, Windows, Linux, Plan 9, Free/BSD and Solaris. The same Dis virtual machine runs in this virtual operating system - you can run the same programs unmodified, including the entire Limbo development environment. In its hosted form, the kernel uses the services of the hosting operating system. So for example, it uses the NT or Linux filesystem, it uses the X or Windows low level graphics primitives, it uses their networking services to reach the outside world. This means that it instantly leverages the effort that has been put into developing drivers for other operating systems such as Linux and NT.
An Inferno application doesn't need to know which kind of kernel it is running on - they all look the same to it. Take the Lego brick [vitanuova.com] on the Vita Nuova website. This can be controlled by a Limbo application. That same Limbo application can be run from Windows, Linux, Plan 9, the screenphone on my desk (running native Inferno) or even from within a web page in Internet Explorer (using the Inferno plug-in) - without re-compiling it.
Re:Cleanliness vs. Performance. (Score:1)
that's almost exactly how it happens in Inferno too. the fact that the metaphor for the gethostbyname call looks like a file system really causes hardly any overhead. this is how it happens in inferno (and in plan 9 for that matter only there you need a trap to get out of user mode into supervisor mode):
first you open the file /net/cs. if the network device is local, which it usually is, then the entry in the file descriptor table is now a pointer to a kernel Chan that has been provided by the device serving /net. Inside this Chan is a set of function pointers, one for each of the basic file operations (i.e. open, read, write, stat, etc). when you do a write of, say tcp!slashdot.com!http, the kernel just has to do a single indirect function call to the write() function in the Chan and you're in the device driver. this is probably just as efficient as a Linux system call, especially since that in Inferno there's no distinction between user mode and supervisor mode (the language is safe), so you don't have the overhead of doing a processor trap.
In Inferno: You write something to a virtual file. The Inferno filesystem intercepts the write. It takes a look at what command you are trying to do, takes a look at the stuff you feed it (parameters) and then passes that info onto the networking code in the kernel via a function call. This step of having the kernel intercept the call and decode it is what introduces the overhead.
the kernel doesn't have to ``decode'' the call any more than a linux kernel does. yes, it has to verify that the file descriptor is valid (big deal, if (fd >=0 && fd <= fdgrp->maxfd)) it's the device driver itself that does the decoding of the request, and since in the case of gethostbyname() you're just mapping from a string anyway, there is no more overhead.
Also, since it is a virtual file, memory writes and reads have to be done than during a funciton call. All this is what introduces the overhead.
nope. inferno system calls do not make any copies of the data unless they have to. i just had a look at the relevant code, and the pathway between a user program doing write() and the device getting that call probably about 20 to 30 machine instructions executed. there is no real overhead compared to the traditional syscall interface.
BUT what you do get is consistency across all device interfaces. because gethostbyname() is not just a system call, but is part of the namespace, i can export that down any data connection. so, say i've got a little handheld device that has no tcp/ip stack, no DNS, nothing apart from some sort of serial driver and the Styx driver (which is very small), then i can connect it up to my desktop PC, import the network devices + /net/cs from it, and bingo i've got what looks like direct access to the net. yes, i've now got to send those requests over the serial link now, but i can do something that i couldn't do otherwise without inventing my own, use once, limited purpose protocol...
that applies to all inferno devices. the fact that the interface is an abstract one does not necessarily mean that it's inefficient. if you're interested, have a look at the plan 9 [cmu.edu] code (login 9fan, password glenda) that does the same thing. i think you'll find that the path from user program to system call implementation code compares favourably with most *NIXen.
the file abstraction in inferno is a wonderful thing - if you're using it, it means you don't have to write a specialised protocol for every new network service - if a service is running locally, it's efficient; if it's running remotely, the protocol work is done for you.
Re:"New Ideas" in Inferno (Score:1)
Re:Lucent is evil (Score:1)
figure that out u grasshopper.
Re:Cleanliness vs. Performance. (Score:2)
Inferno? Plan9? (Score:2)
legos (Score:1)
Why is it called inferno? (Score:1)
is it because someone said "what the hell is that for?"
Re:How useful is this? (Score:1)
Re:How useful is this? (Score:1)
Re:Embedded OSes. (Score:1)
As many as possible, please. Choice is good, the more choice you have, the better chance is that you can find an OS that suits you and your needs best. Not only that, but as long as people continue to create new OSes, new ideas can be introduced and computers can continue to get better.
Linux wouldn't be where it is today if Linus had thought "Oh, we already have BSD, DOS, AmigaOS, SunOS etc. etc." (Except, he would probably have thought it in Swedish.)
Re:Embedded OSes. (Score:1)
Products that currently use Inferno (Score:2)
What all products are currently using the Inferno OS?
I know that the Lucent Managed Firewall / VPN Gateway does, and I have to say, even though it has quite a price tag (>$10k), it's still a very nice device. They integrate a full feature ICSA and NSA-certified hybrid firewall including anitivirus control and URL blocking. I believe the throughput is in the 75 Mbps range for 3DES (with a few thousand VPN tunnels). Real nice box, but yeah, you pay for it.
Lucent is evil (Score:1)
Re:"New Ideas" in Inferno (Score:1)
Specifically, Inferno was indeed written mostly in C (not in Limbo). Limbo is the language for application developers, and is compiled to bytecode for running on the Dis VM. As to where the Inferno kernel runs in regard to the Dis VM and the actual hardware, I'm not really sure. Check the websites for more info.
My other previous comments are accurate to my knowledge (namespaces, files, Styx, etc.)
Was Plan9 Accepted as Free (as in GNU)? (Score:1)
Re:Not a Good Idea(tm) (Score:1)
Haven't used '98 or NT much, eh?
Re:OS runs as an application (Score:2)
Shouldn't be too hard. The host OS needs the ability to intercept and annull system calls. There are some other things which would be nice to have, but probably can be worked around if they're not there.
NT allegedly has the capabilities, 98 is iffy, and 95 is out. I've looked at FreeBSD (and one other, I think NetBSD) and they don't seem to have system call interception. I don't know about the other Unices.
Jeff
Re:Was Plan9 Accepted as Free (as in GNU)? (Score:1)
Re:"New Ideas" in Inferno (Score:2)
had to respond to this, as i've recently finished writing the inferno shell. (unless that's anonymous coward chris, ya bugger, in which case i've just been trolled, sorry folks)
where else can you make a distributed app in one line of shell script? /dev/shellctl {} {somecommand ${unquote ${rget data}}} /dev/shellctl /dev/shellctl :-)
file2chan
that one line makes a file in the namespace - any write to that file runs somecommand with the arguments that have been written to the file. i.e. i can do:
echo ${quote arg1 'arg 2'} >
or even better:
fn somecommand {
echo ${quote $*} >
}
somecommand arg1 'arg 2'
and it'll run
somecommand arg1 'arg 2'
in the original process. the properties of the inferno namespace mean that i can then export that across the network transparently, encrypted, etc. corba eat your heart out.
Re:Too little for too much $$$ (Score:1)
Linux is not perfect nor the final answer for everything. However, there are other free thing out there that come with better documation. The open source BSDs are well documented, commercial support is available for them, and have 20 years of history.
Re:Performances? Bugs ? (Score:1)
Re:Embedded OSes. (Score:2)
If you knew anything about embedded programming, you wouldn't want Linux to be an embedded OS. You don't really want an embedded system with the "unlimited resources" attitude of UNIX. That's not to say Linux is bad, just that it is out of place for embedded systems work.
Re:No. (Score:1)
Re:How useful is this? (Score:1)
Does the name TiVO ring a bell?
Re:Why is it called inferno? (Score:2)
Re:OS runs as an application (Score:1)
Re:Notice who pays the full price (Score:1)
Re:OS runs as an application (Score:2)
Could you point me at the code in the kernel that implements it? Or anything on a FreeBSD system that uses it?
I looked at the FreeBSD system call path and saw no sign of any kind of tracing or interception. Also, the ptrace headers contain nothing resembling PTRACE_SYSCALL, and strace doesn't exist on the system I looked at.
Jeff
It's too bad Limbo is such a horrid language (Score:3)
But what sent me running away screaming was the programming language you were expected to use. Here was a language that looked like it was a solid step backward from C! And I'm sure everyone from procedural to functional programmers and everything in between can agree that this is an undesirable first impression to make upon someone.
-
Re:Um. (Score:1)
That's because... (Score:1)
Limbo is Just Another Procedural Language. Most people fighting over the future of programming either side with functional, OO, or something yet to be determined. You don't hear too many well thought-out debates by respected individuals calling for a return to our software roots. And even were it not a procedural language, it has a very unimpressive set of primitive types, and some grammar changes are a tease. You're likely to forget you're not programming in C-progeny syntax, and botch something mightily.
-
Proof reading helps (Score:1)
-
other related info... (Score:4)
Infernal OS? (Score:2)
Wait, Inferno?
New OS's from this company... (Score:2)
It seems that this company is publishing two OS's from Bell Labs - and is trying to enter the alternative OS market. I've played with the inferno emulation environment under Linux, and it was interesting but horridly slow. I hope the standalone version corrects that. However, I do have a few questions: What is it good for? What programs are for it? How easily can I port programs from *NIX?
Re:other related info... (Score:2)
Inferno? sounds like hot property (Score:1)
if Inferno is in competition with Microsoft (being an operating system) does that mean That Bill Gates is God and Microsoft is heaven?
Ol' Bill ain't evil, he's just misguided. We should buy him a Guide Pengiun.
==============================
http://www.geek-ware.co.uk
Application Hostin' (Score:1)
Too little for too much $$$ (Score:3)
Wait. Linux is *free* you say?!?!? Never mind.
OS runs as an application (Score:2)
How hard would it be to make Linux do that? I'd think that User Mode Linux [sourceforge.net] would be a very good start.
--
Re:Lucent is evil (Score:1)
Probably not (Score:1)
Re:Embedded OSes. (Score:1)
Notice who pays the full price (Score:3)
Not that I'm complaining--they're entitled to go after any market they like. It's just plain from the price structure that they've no interest in the grassroots individual developer market at all.
It's probably not a bad choice, if they want to keep it for use only with "network devices" rather than PCs. But still, as PalmOS has shown, having grassroots developer support for non-PC computing devices is certainly an asset.
Steve
Re:Cleanliness vs. Performance. (Score:1)
I don't think it's silly to use files for DNS lookups, especially considering that it means I don't have to deal with those ugly gethostbyname()-related structs anymore when I'm programming. As far as this being inefficient "because it's going through the filesystem", this is not true. You are thinking of the old concept of filesystem, which refers to things on a big magnetic disk. The Inferno "filesystem" files are not necessarily files at all in the traditional sense. Many of them (including the DNS-related files) do not reside on the hard drive at all. They reside in memory, and they run code when people open/read/write them. There is no inherent inefficiency in this.
"New Ideas" in Inferno (Score:5)
Inferno only runs directly on one architecture: the Dis virtual machine. This isolates in a very clean way the platform-specific parts that need to be changed to get Inferno to run on various architectures: just rewrite the Dis machine wherever you want Inferno to run.
Most of Inferno was written in a new language called Limbo. It's authors seem to like this language, although I've seen a good bit of criticism of it from others ("the infernal language"). I don't know much at all about Limbo first hand.
This concept is borrowed from Plan 9. The concept is that different processes have different views of the system called namespaces. Each namespace is essentially a hierarchical file system that presents available resources to the process. If a process does not have enough privilege to use something, it won't even see it. What are these resources? This gets into the next point...
This concept is borrowed from Unix but is taken to new extremes. All resources in the namespace are presented as files. The idea is to unify the interfaces to a variety of things by having an open/close/read/write way to use a variety of resources. Unix presented devices this way (/dev). Inferno goes a step further by presenting other machines, network cards, and a variety of other resources as files. For example, DNS lookups and socket programming can be done simply by reading and writing files. This is not so under Unix.
By using this hierarchical filesystem view of everything, Inferno can essentially hide that parts of this file system are remote (like NFS mounts). The hope is that programmers can write programs that read like simple shell scripts (open, read, etc.) to manipulate local and remote data and machines.
Styx is the protocol that is spoken over the network in order to present this filesystem abstraction remotely. Note that these 'files' are not traditional files: they can have arbitrary semantics (they can make things happen on the server when read/written; the possibilities are endless). A Styx server exports some filesystem to a Styx client. Note that the server decides what the semantics are for this filesystem (writing file A causes some configuration to be rewritten, reading file B reads off the current configuration, etc.) The client can mount this filesystem so that it appears in the namespaces of processes on the client machine.
I think Inferno has a lot of potential, even if only for simple management of networks. Today, management of heterogeneous network can be pretty complicated (managing routers with LDAP, SNMP, etc.). If routers implemented Styx servers to expose their configuration options as a filesystem, then some Inferno machine could mount all of the routers in a directory and run a simple script to configure them all. This would be much simpler than what goes on today.
Re:New OS's from this company... (Score:5)
as far as performance goes, there's also the fact that there hasn't yet been a great deal of work done optimizing the compiler output or the JIT (i.e. currently the JIT does little registerisation, where the design of the DIS VM means that registerisation should be relatively easy to do - see this [vitanuova.com]). i have a feeling that it's quite a lot faster than most java versions.
what's it good for? all sorts of things. it's a really clean environment to write programs in. where plan 9 [bell-labs.com] is really clean in the namespace and the system interface, but still uses C as the application programming language, Inferno has all that, but uses Limbo as the language with Dis underneath.
the main advantage it gives you when writing programs is that your programs are unconditionally portable - if i've written a Limbo program to run on a screen phone (bare hardware, ARM SA1100) then, assuming enough memory, i have no doubts about it running perfectly on any other platform on which Inferno is supported.
that, coupled with the fact that limbo is a really, really nice language means that i don't want to develop for anything else. i started off as a C developer about 10 years ago, managed to escape Ingres (eugh) after a couple of years, hacked some Occam (which is a nice language, but somewhat limited in its type system), ended up in Objective-C under NeXTstep/Openstep/(macosX?). so i've hacked in a number of languages, and Limbo wins hands down.
why? it's difficult to say. it's a combination of many factors that all go to make up for a thoroughly enjoyable programming experience. i love C (not C++ though!) and it keeps the "power at your fingertips" feel that you get with C, but without pointers, with garbage collection, with complete type safety... perhaps the main feature is that when you read a Limbo program, you can actually tell what it's doing! (shock horror). all the names that are accessible to a fragment of code are easily findable. there's no overloading. the OO paradigm works entirely around aggregation - no inheritance whatsoever. the inbuilt types work really nicely - value types mean that in a multi-threaded environment, which Inferno/Limbo is, you are utterly certain that a value can't be changed underneath you).
what programs are for it? well, there's a web browser [vitanuova.com], but if you're running it hosted, then you'll probably have one anyway (that doesn't have to conform to the restriction of needing to run in 4MB). i've written what i think is a fairly cool programmable shell [vitanuova.com] for it which is pretty small as well (main binary for it is 36K). i also wrote a passable version of Tetris (which is great 'cos now i can play the same version against people in the office running windows, linux, plan 9 and screenphones!), and i'm finishing off a pretty nice FIBS [fibs.com] client. most of that stuff i did in my spare time. there's a version of Acme [vitanuova.com] that's been ported, so you can see how the original compares to Wily.
how easily can you port programs from *NIX? (shouldn't that be *N[UI]X ? :-]) depends on what sort of program you're talking about. what inferno does *not* have (and this is the reason it's so small) is all the legacy stuff that *NIX has picked up over the years. this it has in common with plan 9. it does not have cursor addressing programs (although i wouldn't mind porting a decent vt100 emulator). it does not have termcap/terminfo/curses/ioctl/fcntl or sockets. so porting anything that relies on that stuff (e.g. emacs, slrn) won't be at all easy. BUT, straight C usually goes very nicely into Limbo. most of the standard unix command line programs (i.e. the ones that just munge stdin to stdout) go fine. The Limbo arithmetic expression syntax uses the same precedence rules as C, so all those nightmare mathematical equations are little problem (unless they've got dodgy type promotion going on, which you want to know about anyway).
the best thing about inferno is that it's a truly component oriented architecture. OO systems with inheritance don't give you that as there's too much interdependence between objects at different levels. Limbo modules under the dis VM really do work as plug & play s/w...
hope this helps!
Re:Inferno? Plan9? (Score:2)
Re:Was Plan9 Accepted as Free (as in GNU)? (Score:1)
Re:No. (Score:1)
You want the rock you're gonna have to EARN it. Now, I know this guy, owes me a lot of money. You want rock, you go "remind" him who his friends are, 'cause it gets REAL lonely at the bottom of the river, and we all want to be friends here, right? That's what I thought. Nice and easy.
Jimmy, escort him out.
it has a couple of stellar leaps (Score:1)
Garbage-collection and run-time type safety are both very nice. From the sound of things, you can even have a direct pointer to something in someone else's address space. Plus, the security model sounds much better than Unix's.
In fact, it has everything on my wish list for a good OS except for automatic checkpointing the way EROS has. It's just too bad the thing costs $150....
Re:It's too bad Limbo is such a horrid language (Score:1)
You obviously didn't try it!
It took me a couple of hours to get going with Limbo and it was well worth it.
The language has threads and inter-thread communication built in at the grass-roots. These are no after-thought strap-ons or additional libraries with clunky interfaces. They are part of the language in a very elegant and powerful form.
The language also features a very effective garbage collector, really useful string and array manipulation primitives and lists. (Never underestimate the usefulness of builtin lists in a language.) All absolutely fabulous.
I find Limbo programs smaller than the equivalent C, much more readable and predictable. By predictable I mean that a quick scan of the code can reveal what it is doing - there are none of the GOTCHAs you get in other languages e.g C++ or Java where you cannot be sure what a particular statement or expression means without recourse to a Class browser (or prayer).
The language is easy to learn, clean, type safe, innovative,elegant and FUN! What are you afraid of?
Re:Saw it coming (Score:2)
I use the Acme development environment (which both Inferno and Plan 9 have) as my editor of choice on Linux, Windows and Plan 9.
Re:It's too bad Limbo is such a horrid language (Score:1)
I have worked with a lot of programmers whose background is rooted in C. They have all experienced the C++ and Java euphoria and come out of it wondering what all the excitement was about - me included.
Limbo was a breath of fresh air. It retains the salient and useful parts of the C language. It is surprising how easy it is to port C applications to Limbo. Take, as an example, the code from the `cat' command to copy a file to standard output:
cat(file: string)
{
n: int;
fd: ref FD;
buf
if(file == "-")
fd = fildes(0);
else {
fd = open(file, OREAD);
if(fd == nil) {
fprint(fildes(2), "cat: cannot open %s: %r\n", file);
raise("fail: bad open");
}
}
for(;;) {
n = read(fd, buf, len buf);
if(n <= 0)
break;
if(write(stdout, buf, n) < n) {
fprint(fildes(2), "cat: write error: %r\n");
raise("fail:write error");
}
}
if(n < 0) {
fprint(fildes(2), "cat: read error: %r\n");
raise("fail:read error");
}
}
It isn't going to take a C programmer long to work out what is going on there.
They might notice that the file isn't closed - but thats because its closed automatically when `fd' goes out of scope (when the function returns).
They might notice that the array of bytes pointed to by `buf' is never freed - but that happens automatically the instant that `buf' goes out of scope. I can still do anything to `buf' that I might want to do to it in a C program: copy it, slice it, change it, even pass it down a channel to another thread but it will be freed instantly the minute the last reference to it goes away. I find that little things like this combined with the clean, fresh, minimalist nature of the language and operating system make it a pleasure to work in.
Oh, and strings are a basic type too - its C without the headaches!
The source for all the system commands is included with Inferno - in fact its freely distributable.
The limbo reference manual (written by Dennis Ritchie) is also very precise in its definition of the language.
Oh, that I had a moderation point to spend on this (Score:2)
Impostor (Score:2)
Re:Products that currently use Inferno (Score:1)
Re:Cleanliness vs. Performance. (Score:2)
Not a Good Idea(tm) (Score:1)
What exactly would an open source hell provide anyway? Could we tweak our sufferings such that they maximize redemption value? The most molten iron poured beneath our eyelids that we can sustain for hopes of salvation? Actually, that's not too terrible of an idea. After all, we should be able to tweak demon rotation routines, because being tortured by the same demon for too long gets predictable, and I can't think of a single religion that would prefer their hell be predictable. After all, what you can predict, you can learn to deal with. But then again, if you can deal with what you're given, odds are you're not going to end up in hell anyway.
Take my grandmother for example. Six years ago she died, having driven her Oldsmobile straight into a bus full of nuns. No faster way to hell than that. Which begs the question of why do senior citizens always buy Oldsmobiles anyway? Is it the name? I mean, I'd personally prefer to NOT be reminded everytime I leave the house that I'm past my usefulness. Let alone the jarring discontinuity of buying a new Olds. No wonder she killed herself.
Ummm . . . what was I talking about?
How useful is this? (Score:5)
From this introduction [vitanuova.com] at the web site:
Inferno is intended to be used in a variety of network environments, for example those supporting advanced telephones, hand-held devices, TV set-top boxes attached to cable or satellite systems, and inexpensive Internet computers, but also in conjunction with traditional computing systems.
Have we not seen this before? There certainly seems to be a proliferation of "network" operating systems for non-computer systems at the moment. Whilst I'm not knocking Inferno, I don't really know much about it, it has to be said that this are is fast becoming saturated, and the competition is likely to be fierce.
One thing I found interesting is that Inferno, as well as being a stand-alone OS, can also be run as an application under Windows NT, Windows 95, Unix (Irix, Solaris, FreeBSD, Linux, AIX, HP/UX) and Plan 9. This could give it an edge since it increases the number of places where its applications (written in Limbo?) can be run. So even if it doesn't become hugely popular, it might still survive on other platforms.
---
Jon E. Erikson
Saw it coming (Score:1)
Re:Embedded OSes. (Score:1)
You troll. Linus is ethnic Swedish.
Re:Too little for too much $$$ (Score:1)
Re:"New Ideas" in Inferno (Score:1)
Performances? Bugs ? (Score:1)
Does anyone here has used, the Inferno system?
What is the performance?
And since it is a "new" product, is-it usable? Is there many bug left ?
PS: I'm not trying to start a flamewar, just looking about some hands-on experiments.
Re:"New Ideas" in Inferno (Score:1)
* Portability across processors: it currently runs on Intel, Sparc, MIPS, ARM, HP-PA, and PowerPC architectures and is readily portable to others.
(means they've got the virtual machine for those)
* Portability across environments: it runs as a stand-alone operating system on small terminals, and also as a user application under Windows NT, Windows 95, Unix (Irix, Solaris, FreeBSD, Linux, AIX, HP/UX) and Plan 9. In all of these environments, Inferno applications see an identical interface.
* Distributed design: the identical environment is established at the user's terminal and at the server, and each may import the resources (for example, the attached I/O devices or networks) of the other. Aided by the communications facilities of the run-time system, applications may be split easily (and even dynamically) between client and server.
* Minimal hardware requirements: it runs useful applications stand-alone on machines with as little as 1 MB of memory, and does not require memory-mapping hardware.
(Not too bad for a full fill+networking system)
* Portable applications: Inferno applications are written in the type-safe language Limbo, whose binary representation is identical over all platforms.
* Dynamic adaptability: applications may, depending on the hardware or other resources available, load different program modules to perform a specific function. For example, a video player application might use any of several different decoder modules.
Note that the namespace and a homogeneous model of the system are ideas that have been suggested as desirable for some time.
Re:"New Ideas" in Inferno (Score:1)
Of course it was. But to get those descriptors, it had to call things like socket(), bind(), etc. Inferno attempts to get rid of some of that non-file baggage by letting you just open and read some files rather than having to use network-specific system calls.
I wonder if their sockets only support "r" "r+" "w+" options
To my knowledge, their implementation supports any TCP socket options.
Re:Cleanliness vs. Performance. (Score:2)
Re:Embedded OSes. (Score:1)
>Linux to be an embedded OS. You don't really want an embedded system
>with the "unlimited resources" attitude of UNIX. That's not to say
>Linux is bad, just that it is out of place for embedded systems work.
Yeah. 9 out of 10 Microsoft Astroturfer surveyed knows that Windows CE should be used in embedded systems instead...
Re:Cleanliness vs. Performance. (Score:1)
If I'm using the serial port from an application it is much more attractive to be able to open a file and write data to it, or open a file and read from it - blocking until some data arrives than to mess around with polling memory locations or waiting for an interrupt. If I want to control the device (baud rate, handshaking etc) instead of ioctl() or similar specific system calls I write a well defined message to its control file. See [vitanuova.com] the serial device man page. In fact, I could probably consider writing my simple application as a shell [vitanuova.com] script.
It has other advantages too: the same technique works on all platforms - no need to change my application; no need to worry about byte ordering issues; I can use file system permissions to control access to my device.
But what if I haven't got a serial port? Not a problem either, just import one across the network from a machine that does, bind it into /dev as /dev/eia0, /dev/eia0ctl etc and run the same application. Not much use for ioctls and memory accesses here!
Presenting this information in the file namespace has many advantages. If an application can get a service such as DNS lookup by opening, writing and reading from a file then if a particular machine doesn't have such a service it can simply bind the file into its namespace from a machine which does and then the service is available.
A really great example of this is remote debugging. In Inferno everything needed to control a process for debugging is encapsulated in the '#p' prog [vitanuova.com] device. It presents a subdirectory for each running process with control files in each directory. The ps [vitanuova.com] command and the debugger [vitanuova.com] use this device which is conventionally bound into /prog. To debug a process running on, say, my screenphone which serves Styx on a serial port I just run /dev/eia0 /n/phone /n/phone/prog /prog
mount
bind
and now `ps' will show me all the processes running on the phone and the debugger will let me debug them.
It boils down to letting the device driver writer make sensible decisions about which services are made visible to its users and how they are presented.
Re:Cleanliness vs. Performance. (Score:1)
A filesystem (in the traditional sense) is just the contents of another device mounted in the namespace - there's nothing special about it. Many Inferno systems either import their storage from another system or use flash or just don't need permanent storage.
Re:Cleanliness vs. Performance. (Score:2)
In Linux: You call gethostbyname(). It calls a system trap which jumps to that code inside the kernel (or netoworking library or whatever.) That function then procedes to get the host name and return it.
In Inferno: You write something to a virtual file. The Inferno filesystem intercepts the write. It takes a look at what command you are trying to do, takes a look at the stuff you feed it (parameters) and then passes that info onto the networking code in the kernel via a function call. This step of having the kernel intercept the call and decode it is what introduces the overhead. Also, since it is a virtual file, memory writes and reads have to be done than during a funciton call. All this is what introduces the overhead.
Inferno isn't new- has its niche (Score:1)
Re:Cleanliness vs. Performance. (Score:1)
You're oversimplifying things on the Linux end, methinks. gethostbyname() is a simple library call, but if you have a system-wide cache of host info (such as is offered by nscd in Solaris), it still has to do interprocess communication (which implies context switching) with nscd to check whether the host is in the cache before it does the socket stuff to talk to the domain name server.
I would expect that the real bottleneck in doing DNS lookups is the network traffic, which is exactly the same in the Inferno and Linux implementations.
Re:OS runs as an application (Score:1)
Um. (Score:2)
The things you write generally seem rational but they aren't what I would write. Your posting on the Academy tonight was especially far off.
Get your own name, already, cowboy.
Bruce
Re:Products that currently use Inferno (Score:1)
Making use of commercially non-productive code (Score:1)
Embedded OSes. (Score:2)
It's true, choice is a Good Thing(tm) when it comes to OSes, but I think that these companies are really starting to get jealous of the developer interest and support that the *Nixes enjoy and want a piece of the action.
I for one would rather be involved in the embedded Linux effort.
Re:How useful is this? (Score:1)
Re:Infernal OS? (Score:1)