Microsoft Releases A New Monad Command Shell Beta
Watercooler Warrior writes "Slashdot originally broke the news that a new Microsoft command shell was in the works when a reader noticed a suspicious job posting by Microsoft India. Today Microsoft released the first really usable version of the shell (codenamed Monad) to beta testers - and anyone who carefully reads the WinHEC slides about Monad will find how to join the beta and get a peek at it. The shell looks like a bunch of old-school Unix and Perl hackers were given free rein to do what they wanted with the .NET framework, and from what is known about the backgrounds of the Monad developers this is probably pretty close to the truth."
Google has a new command shell coming out as well; the name? Gonad.
Quidquid latine dictum sit, altum viditur
I am seriously considering getting rid of Gentoo, formatting the drive clean with the data backed up, and go buy a copy of Windows XP at my Costco for $75 just to give it a try.
Because I unfortunately have to hack on a windoze box, I would love to see an improved command shell.
The current command shell just plain sucks when compared to OSX's or KDE's shells.
I can't wait to install.
truth={ moz: "sweet" }
Now Virus Writers can make full use of the .NET interface without even needing a compiler!
What is the new extension going to be? Just think how many people are going to open these files from email attachments!
"It's Monad. Like Gonad, with an M."
There was a talk about this at the PDC, too. Amazingly cool stuff.
It's more than just a new command shell. It's a new framework for creating command- or script-driven software compoents. It makes it easy to little apps that can parse parameters and return structured data (not just text).
Here's an example from the slides:
The dictionary
First thing I thought when I saw Monad was its definition from category theory. A Monad is a triple, containing a functor, and 2 natural homomorphisms.
Less cryptic, is its use in Haskell as way of parameterizing computations. Specifically its used to produce the I/O Monad which is parameterized by some type A in the pair IO : a -> world -> (a, world).
More in line with ur question, the word Monad comes from greek , and it means "one" "single " or "unique". So I guess they think this is a "unique" bit of work.
And I can't say I'm that impressed yet. I'd like to see man pages or something actually implemented. man currently does stuff but man doesn't work for any command I've tried (thus there don't seem to be *any* options). There's a lot of aliases built-in to emulate Unix (e.g. ls, ps) but the lack of grep makes piping seem...well pointless. The actual versions of commands seem entirely too object oriented and thus too verbose. "get-directory" is not something I want to type (I can't remember off the top of my head, but some of them are really absurd). "ps" is ps for a reason. No frequently used command should be more than 4 letters, or require you to use aliases so you don't end up writing a novel.
Your milaage may vary. I don't care about a scripting language. I have Perl (for Win32). As far as an interactive shell, it still has a lot of rough edges. Personally, I'd rather just use Cygwin/Bash and get a real shell.
(Though I talked to one of the guys personally and he seems pretty cool.)
-- Political fascism requires a Fuhrer.
The way it handles pipes is good - but FOR THE LOVE OF ALL THAT IS HOLLY! GET. RID. OF. THE. PAPERCLIP!
(it looks like your writing a shell script)
Moneyed corporations, non-working 'poor' and criminal prisoners are turning productive citizens into tax-slaves.
...what the HELL were old school hackers doing working for microsoft in the first place. ;)
Go to http://beta.microsoft.com, login with your passport account.
:)
The guest id is mshPDC.
Go nuts.
Check out Mon and Mon.cgi
.. with human body parts.. monad.. go---.. ;-0
Only 'flamers' flame!
Does slashdot hate my posts?
There's already a plethora of shells out there, -- korn, bash, csh, zsh, and way more. And combined with ultilies like find, sed, grep, awk and with the added availablity of languages like perl, python, 'c' and all the lexical mulitude of routines that go with,
Microsoft should consider cooperating and improving what's already out there instead going it alone and reinventing the wheel. Unless, of course, all those old school Unix developers were really all wrong and now Microsoft's is taking the opportunity to show us how it's really done.
[sub] http://developers.slashdot.org/article. /. link)
pl?sid=04/09/21/0153251&tid=201&tid=156&ti d=8
[sub] sweet
[sub] urrr, down with Microsoft
[sub] =)
[geek] cute (re
[geek] so they're now inventing stuff that's been around how many
decades?
[sub] alphageek: wait, they're going to patent everything
[sub] !!!!
[geek] should be fun to watch
[sub] yeap, recreate UNIX, patent it as they go, use said
patents against Linux
[sub] sounds like a business plan made in Redmond
[sub] even better, claim it's New Technology(TM) and claim that
UNIX/Linux is based off 40 year old technology
[sub] 10 years should be how long it takes MS to bastardize
UNIX/Linux
Sounds too much like gonad.
I absolutely refuse to believe for even a second that this was an accident. Maybe they are trying to make it such an obvious joke that it stops being funny after a few days. I hope they try this with more products, they could rename MS Office "Pen by Microsoft", or call the command prompt in the next windows release "Direct Input Command Keyin Like Engine". Also, anything named "Venus" would be cool.
-
~~~
That is most certainly not a statement of fact.
I heard they considered Microsoft Menis and Microsoft Magina too.
No weapon in the arsenals of the world is so formidable as the will and moral courage of free men.-Ronald Reagan
Basically, Monad formalizes in .NET the pipe interface between shell programs. A pipe participant is just something that implements the appropriate "commandlet" interface: it receives some input, produces some output, maybe some errors.
However, in the case of Monad the input and output can be anything, not just text. So in the example:
- get-process | where "handlecount -gt 400" | sort handlecount | out-chart processname,handlecount
The get-process command produces a sequence of processes; where filters it based on an attribute; sort sorts on an attribute, and out-chart produces a textual table of the filtered output.It's important that the input and output of these processes are structures (actually, objects, but I don't want to tickle anyone's prejudices about OOP). .NET knows at runtime about the attributes these structures can have, so you can write apps that manipulate a wide variety of object types: files, metadata-annotated documents, log entries, whatever.
Naturally input/output can be pure text, allowing all the traditional Unix commands such as grep.
Immediate benefit? If you have the right translator, there's no need to munge text output using awkward tools like tr, cut, awk and so on, just to get at the process ID column of ps or the URL column of the Apache log file.
This is better than Unix shells.
How is that different from "tasklist /FI "MEMUSAGE ge 1000" | sort" And I am only using MEMUSEAGE because there doesn't seem to be a handle count filter in XP. I mean some of the stuff seems useable but it doesn't seem like they are really taking full advantage of everything .net could provide. Maybe old hands aren't what was needed. Still more tools are helpful, though MS has a nasty habit of dropping the older tools even when they are further allong in development, or worse starting a bunch of project and not backing any of them.
I'd do something interesting, but my server can't handle a slashdotting.
Marketting. Period.
Believe me. I got stuck with the name "Gword" for
a well known dictionary I did here in Greece a while
ago. Still, even the hacker gets his revenge -
Little known easter egg (any greek friends out there)
if you start my program with any two command params
it doesn't put up that pesky splash bit map.
It is good, though, that you are finally trying to do something new yourselves rather than just buy your 'innovations' from people with a creative bone.
I must confess my ignorance: Does perl have a .net interface yet?
-I like my women like I like my tea: green-
Yes, everything's dandy, until you happen to be using two programs that don't export and import data in compatible formats.
In the *IX world, stuff moves around in simple text formats. You can glue *any* two programs together, even if the original author didn't intend that you do so.
In the Microsoft world (well, the new Microsoft world), you can glue together programs that are designed to be glued together.
Note that Plan 9 did some similar stuff to this (IIRC there was a project called xmlterm that deal with program output that wasn't purely text). It didn't catch on. Dunno how many programs could parse said output, though, or whether it was intended for data representation directly to the user.
On the other hand:
a) Microsoft has clearly realized that administrators need a good shell environment and they have not been providing it. This is a Good Thing, and they get points for picking up on this and trying to do something about it. This may be a positive new start. I dunno who started this project, but they clearly weren't blinded by NIH -- people like Linux partly because there's very little NIH associated with it. People like the *IX shell, and Microsoft is responding. Thumbs up on that.
b) Microsoft is clearly doing something with their Microsoft Research people that is actually going into the OS, and trying to push the envelope instead of just copying. (While the Plan 9 thing above is *similar*, this is not just something they bought from someone.) That also is good.
May we never see th
Structured pipe data has been around for a while, and XML's a natural format for that. I certainly don't see a need to drop in a .Net dependency where XML will do. (Note that I would welcome an XML output mode from ps, though ;)
Also, re: piping binary data about: see netpbm, a graphics toolkit built around pipes.
I'm sorry, but those are not equivalent statements at all. In most (decent) languages, you implement a sort order simply by providing an arbitrary function (or class, or object, or closure, or whatever) that compares two objects. Hardly ever do you need to convert them to strings.
Not to mention that even string sorting is done this way-- you don't sort strings in the same order in Spanish and English, for example.
Are you adequate?
Illustrated here.
Reminds me of the "Magical Microsoft Moments" story:
I've been attending the USENIX NT and LISA NT (Large Installation Systems Administration for NT) conference in downtown Seattle this week.
One of those magical Microsoft moments(tm) happened yesterday and I thought that I'd share. Non-geeks may not find this funny at all, but those in geekdom (particularly UNIX geekdom) will appreciate it.
Greg Sullivan, a Microsoft product manager (henceforth MPM), was holding forth on a forthcoming product that will provide Unix style scripting and shell services on NT for compatibility and to leverage UNIX expertise that moves to the NT platform. The product suite includes the MKS (Mortise Kern Systems) windowing Korn shell, a windowing PERL, and lots of goodies like awk, sed and grep. It actually fills a nice niche for which other products (like the MKS suite) have either been too highly priced or not well enough integrated.
An older man, probably mid-50s, stands up in the back of the room and asserts that Microsoft could have done better with their choice of Korn shell. He asks if they had considered others that are more compatible with existing UNIX versions of KSH.
The MPM said that the MKS shell was pretty compatible and should be able to run all UNIX scripts.
The questioner again asserted that the MKS shell was not very compatible and didn't do a lot of things right that are defined in the KSH language spec.
The MPM asserted again that the shell was pretty compatible and shouldwork quite well.
This assertion and counter assertion went back and forth for a bit, when another fellow member of the audience announced to the MPM that the questioner was, in fact David Korn of AT&T (now Lucent) Bell Labs--the author of the Korn shell.
Uproarious laughter burst forth from the audience, and it was one of the only times that I have seen a (by then pink cheeked) MPM lost for words or momentarily lacking the usual unflappable confidence.
The fine thing with a shell is that when you have issued the same series of commands numerous times you can simply put them in a script - automation done!
However MSH seems (with its OO-influenced design) to be a bit too complex for ordinary work. If people dont use it for ordinary work, they cant write scripts "for free".
The problem today isnt that Windows cant be scripted - it can via VBScript.
UNIX shells are constructed the way they are because users should BOTH use them for scripting, and for every other task. M$ compromises with simplicity (with its OO-design), so MSH will never be as productive as, for example tcsh.
..or is this indicative of a wider trend, where Windows and Linux are coming together from a technology perspective?
Think about it. Over the past few years, the windowing environments in Linux have grown more and more advanced. With the newer XOrg releases and upcoming KDE4 and Gnome 3, I expect amazing things from the Linux desktop.
Meanwhile, while Linux has been addressing it's core weakness, Microsoft already has a firm foothold on the desktop. Instead, the past few years they have been integrating more and more sysadmin-friendly technologies - such as integrating scripting into the OS, improving their command shell (and replacing it - hence Monad), improving remote administration.
Windows has WinFS, Linux has Reiser4 + plugins.
In the next few years, I doubt a layman will be able to tell Windows and Linux apart from a purely features / technology perspective. What *ill*be important, is he thing that is the most important - who do you trust with the source code to your OS? A private company or a group of hackers.
Some more detailled data about the meaning of the word monad. Especially the first three seem apropriate somehow.
Monad The word monad comes from the Greek word (from the word , which means "one", "single", "unique") and has had many meanings in different contexts:Keep open minded - but not that open your brain falls out...
> More in line with ur question, the word Monad comes from greek , and it means "one" "single " or "unique". So I guess they think this is a "unique" bit of work.
They also employ Simon Peyton-Jones, who is the lead developer of the Glasgow Haskell Compiler. MonadPlus transformer chains in Haskell are in fact a lot like structured pipes...
"This begs the question..."
beg the question
to beg the question - definition by dict.die.net
How to (and how not to) Beg the Question. From "On Language: Semantitheft," by William Safire. The New York Times, May 13, 2001
so what's the release name, TEL.NET?
(old joke, felt the need to revive it!)
My computer experience started with MS-DOS 3.3. I became pretty good at writing batch files.
I loved DOS and resisted Windows at first. As we all have since learned, resistance is futile and I was assimilated.
Then, I discovered *nix and I saw the light... a powerful operating system with a command line. I've never looked back.
My colleagues and friends all think I'm fully Anti-Microsoft, but I just prefer to seek alternatives to Microsoft's overpriced products.
If this command shell becomes a truly powerful command shell and scripting language, and I allow myself to forget that Microsoft is an evil company bent on world domination, then this has the potential to make me secretly like Microsoft, a little, again... I'm soooo ashamed...
We'll see... I just signed up for the beta.
---- GhodMode
WOW, it's mixing shell commands, pipes AND SQL-LIKE script constructs. Why didn't they put xml in there as well? And what's with not using PascalCase when this is supposed to tie in with .NET?
How about...
Wouldn't this be... Joke.MoreFuckingConsistant ?
Weird, when I heard this anecdote it happened at AT&T in the late 80s.
The way monads are used to glue functions together is often compared to the pipe operator in shell scripting.
Try Corewar @ www.koth.org - rec.games.corewar
Does this have anything to do with Monads of functional programming?
Based on quick look it seems to be non-functional language.
Shell scripting is the glue that keeps things together and allows easy, flexible and fast combination of different data processing programs.
Only thing I'm missing with current implementations is a possibility to have multiple inputs (pipes) for a program. I know this is a kind of hard to implement without making major changes to OS/existing utilities but it would make things much more usable.
Buzz is a modular sound synthesis program which shows power of combining simple effects to solve/create complex problems/sounds.
Did you even read the first article you linked?
'The second [common meaning], "to invite the obvious question, (with an inanimate subject) to raise the question", is now the most commonly heard use of the phrase.'
Language changes. This phrase no longer means what you think it should. Get over it.
yes, I'd heard this anecdote from the 80's also.... OP got modded funny, though... sigh.
You are my friend for life. "Feel the power of one nut"!! Monad!
Un-news
It's great that they're trying to do something at a higher structural level. The Unix command line data structure is essentially just a sequence of '\n'-terminated lines. But while it looks like each filter command is doing its own thing (where, sort, group, etc.), they're really just doing the equivalent of an SQL 'SELECT'. I wonder why they are forcing the Unix-style pipeline syntax instead of a syntax that maps well to the relational model.
~$ su ~$
I suppose the fact that they want Monad users to be able to treat .NET objects like Bash users treat text means that they have to write something new.
But going back to more basic reasons, Bash is tied very closely to the UNIX signals model and fork()/exec(). Windows uses a better process model, and has a different signals model. Porting bash would be very difficult, and the performance wouldn't be as good as a shell that was designed for Windows.
With the .Net runtime installed, is it possible to utilize Monad with Windows 2000 Pro?
I wonder how Iron Python might use what these folks are doing? I can see that this shell may have some slick features-but I don't see a compelling innovation here. What I see is a lot of investment in doing some basic stuff to make windows work that should have been done long ago. If it it done vaguely correctly I suspect some better tools will take advantage of the groundwork being laid here.