Downloads
Source
The current version of Hotwire is 0.710 (Feb 5, 2008): ChangeLog, Source.Linux/Unix
See this wiki page for distribution status: Linux/Unix packagesOther systems
Hotwire for Windows and MacOS X is in progress but not ready for general use. See these wiki pages for the status of the ports:What is Hotwire?
Hotwire is an object-oriented hypershell. It is a shell designed for systems programming (files, processes), and thus it is in the same conceptual category of software as the Unix shell+terminal and Windows PowerShell.
(To learn more interactively than reading background here, you could try downloading a version of Hotwire for your operating system and experiment with it; see the links on the left.)
The goal of the Hotwire project though is to create a better systems programming shell than both Unix and PowerShell. We call it a hyper-shell because Hotwire blends the concepts of a systems-oriented shell with a modern graphical user interface display. It takes advantage of your desktop environment rather than being a text box. It retains some advantageous attributes of a shell such as keyboard command orientation, interactivity, completion, and scripting.
From an implementation perspective, at the heart of Hotwire is the concept of asynchronous object-oriented pipeline processing. Layered on top of this in a tightly integrated fashion is a graphical display, control and introspection system.
Hyperlinked help display
How is Hotwire better than Unix?
Hotwire merges the concepts of Unix terminal emulator and shell into one integrated process, using a modern programming language runtime. It supersets Unix out-of-process bytestream pipelines in favor of an in-process object-oriented pipeline, while still allowing invocation of out-of-process Unix binaries which output text. Because the shell and display now understand the type of output rather than just displaying a text stream, the system can be far more intelligent.
Hotwire showing a system process list
Considered from a modern perspective, the Unix terminal is two things. First, it is a container for the display of human-readable Unicode text, suitable for applications like the Unix shell (e.g. bash) which can run other programs that output text. Think ls (without colors) dmesg, ps, cat (on plain text files), etc. A much smaller percentage take lines of input for a question or two.
Secondarily, the Unix terminal is also a poor GUI toolkit. One might challenge this - how is the terminal also a GUI? Here we are defining a GUI program as one whose output is not suitable to be piped into another arbitrary program. Today there are few commonly used applications written for the terminal GUI. Examples are vi, mutt, man, and various others. These programs are not suitable for scripting, and thus are equivalent to conventional GUI applications from the perspective of a shell.
With this in mind, you can now understand that Hotwire does not attempt to implement an extended terminal GUI (though there is a term builtin to launch terminals easily). Now, we can assume that all system commands output plain text, and so the environment can be optimized for text processing. For example, Hotwire keeps the entire output of every command by default, and allows for Firefox-style search.
Hotwire allows you to interactively refine pipelines by piping the output of the previous command into a new one, without re-executing the last command. For example, if you've ever created a diff using a slow revision control system and then wanted to save it to a file or search/grep it, this feature is extremely valuable.
Interactive search over lspci output
How is Hotwire better than Windows PowerShell?
Hotwire shares a conceptual heritage with PowerShell's object-oriented underpinnings. However, Hotwire makes a number of different design decisions, and the result is a very different program. For a start, Hotwire was designed for a rich, interactive graphical interface. While third party PowerShell environments exist, the result isn't the same as if the entire system was designed for it from the start.
History search
Another design choice is that the Hotwire project made the decision very early not to attempt to create a full new scripting language. Hotwire does have a small Unix-inspired pipeline syntax, but a major goal of the project is to make it easy for users to leverage well-known existing programming languages such as Python and Ruby - and (where available) Unix shell script.
Running a Unix shell script in Hotwire
Finally, Hotwire has a much more day-to-day system interaction feel to it than PowerShell does. For example, Hotwire is fanatical about saving your history, and making it easy to find frequently used commands and directories again. Hotwire integrates with the desktop - its builtin rm moves files to the Trash. And going further, on Unix Hotwire integrates closely with other systems programming tools like OpenSSH; the ssh builtin allows completion from known_hosts, and it is a longer-term goal for Hotwire to provide the best possible SSH experience.
Does Hotwire mean rewriting Unix binaries in Python to output and process objects?
This question gets to the heart of what the project is. The answer is "Some, yes". But not all. The general idea is that where the builtin can provide a both useful and usable replacement, then we do so. For example, Hotwire takes the ls name for LsBuiltin. However, we chose to name the builtin to enumerate Processes proc, not ps. That's because Unix ps has a number of useful formatting options and extra information that isn't included in proc.
The goal in a larger sense is that the Hotwire "builtins" are just trivial wrappers around real APIs. For example, Hotwire includes a http-get builtin that just returns a HTTPResponse object from the Python standard library:
Invoking http-get
It is important to note here that at the current time, Hotwire's namespace is not declared stable. Names may change as the system evolves.
What about remoting?
Unix terminal emulators can display not only shells running on the local system, but also on remote systems over protocols such as SSH. How does Hotwire's graphical, object-oriented approach fit into this world? There are multiple valid approaches. First, one can simply run a thin desktop environment on the remote machine, and Hotwire inside of that, connecting using a protocol such as RDP.
The second plan is to integrate tightly with systems management frameworks such as Func and Puppet. In other words, Hotwire will become a "rich client" control system, allowing you to easily create scripts locally and then run them on various machines.
Finally, Hotwire includes a SSH terminal application (hotwire-ssh) for the times when you want a plain remote pseudoterminal and shell.
Hotwire SSH terminal client
More information
For further details, you should take a look at the developer wiki.
