Google Releases Open Source NX Server 257
wisesifu writes with news of a new open source NX server, dubbed NeatX, that was released by Google and promptly lost in the shuffle of the Chrome OS announcement. "NX technology was developed by NoMachine to handle remote X Window connections and make a graphical desktop display usable over the Internet. By its own admission, Google has been looking at remote desktop technologies for 'quite a while' and decided to develop Neatx as existing NX server products are either proprietary or difficult to maintain. 'The good old X Window system can be used over the network, but it has issues with network latency and bandwidth. Neatx remedies some of these issues,' Google engineers wrote on the company's open source blog. NoMachine had released parts of the source code to its NX product under the GPL, but the NX server remained proprietary. [...] Neatx is written in Python, with a few wrapper scripts in Bash and one program written in C 'for performance reasons.'"
Re:FreeNX (Score:5, Informative)
It's mentioned in the article. It says that Google rejected it because it's a mess of Bash, Expect, and C and very hard to maintain. Their implementation is mostly Python, with a little C and Bash.
Re:NIH (Score:5, Informative)
Well, it would depend on how much code was written in each language in the original.
NeatX appears to be 90% Python, with only a few stuff in Bash and C, so its basically just a Python app
NX is teh shindiggity! (Score:5, Informative)
It might be worth mentioning to some people who are no doubt confused; there is a difference between FreeNX and NX Free. And on a futher side note, I have tried installing FreeNX two or three times and the packages seemed to be unavailable from distro repo or even from the berlios FS (Weird!). In any case if this Google NX server isn't a piece of junk I will be over the moon!
In my opinion NX is #1 remote display (also sound and printing) technology there is. You get a great quality image over a very slow DSL connection! VNC doesn't come anywhere near it - and for the $0 price tag you can't beat it!
The trouble with NX Free is that it can only allow a few simultaneous connections at a time - I'm hoping Google's server changes this.
Re:Long time user (Score:3, Informative)
I feel like I'm one of a couple dozen NX users
I don't know if many people use NX, but I sure do install it on all my servers now. And while I had trouble with FreeNX, the NoMachine version was really easy to setup [alma.ch].
(I use it with meld and sshfs to compare /etc trees between similar servers.)
Re:FreeNX (Score:5, Informative)
They are not reimplementing it, they are providing a wrapper to the X11 protocol so it performs better on low bandwidth, high latency links.
Ever tried do to remote X over, say, a 2Mb/s connection? Try it again with FreeNX and notice the large improvement in display performance.
Now if only they would somehow include GL in remote X.
Re:FreeNX (Score:3, Informative)
Except that NX is neither a full re-implemetation of X11, nor is it done badly. Instead, it actually works over very slow links.
Re:Where would such technologies be really useful? (Score:5, Informative)
VNC/RDP, for instance, make it really easy to have your entire desktop session, with all open programs, program state, etc. on one computer available over the network from another computer. If you have a whole bunch of windows open, with lots of tabs, and a half finished document, and some other stuff you are referring to, it is way more convenient to just connect to your session, rather than try to recreate it on another machine.
Citrix, X, and NX are really convenient for situations where a program's context matters. If I just want to type out a shopping list, or check a web page, it doesn't really matter where the program I use runs(which usually means that I should run it locally, because latency sucks). If, though, I'm opening my bittorrent client, or trying to edit some documents at work, it matters where the program is running. I want my bittorrent client to be running on a computer with a fast pipe and a big disk, even if I'm controlling it from my cellphone. If I'm trying to edit some work documents, I want Word running on my work's LAN, so all my documents on the fileserver will be available(without the risks involved in just copying stuff to my laptop, then leaving it on the train).
I worked at a school where the latter use was common and fairly highly valued. We didn't want to deal with the hassle of hundreds or thousands of potentially infected machines belonging to students and faculty having VPN access to the LAN. We did want students and faculty to be able to access their documents and email when they were at home. To solve the problem, we used Citrix to offer remote access to all the common programs that students and staff would use to view or edit documents, set up so that the programs would have access to the files of the user that logged in.
It wasn't perfect; but it largely worked. The user would go to a web portal, enter their credentials, and get a bunch of clickable icons. Click on "Word" or whatever and it would(after a few moments of Citrix doing its thing) pop up, looking modestly like a local application. If you hit "Open", though, you'd have access to all your documents from our fileserver. Super easy.
Re:Long time user (Score:4, Informative)
Even DXPC (NX is a fork from that software) kicks VNC's ass.
Re:Long time user (Score:5, Informative)
But what does NX have over VNC?
The performance is an order of magnitude or five better? Honestly, unless you're on something with REALLY high latency, even raw, unmassaged X is frequently better than VNC performance-wise. NX however is hands-down the best performing remote display protocol I've seen. Decently performing (very usable for basic office tasks) full modern desktops when the link has 400ms+ latency and 10kbps bandwidth. It knocks ICA and RDP into a cocked hat.
From the horse's mouth (Score:5, Informative)
Re:It's no Quartz (Score:4, Informative)
The use of a layer such as Qwartz for Android and Chrome is somewhat independent from Google's working on an NX server though, isn't it? NX is a protocol and client / server code for implementing remote applications with good performance, even over low bandwidth and / or high latency links. It was developed by NoMachine, although others (such as FreeNX and 2X) have also built NX servers. So it really serves a very different (and somewhat orthogonal, though it *is* X11-based) purpose to Quartz.
When you mentioned Quartz, I assumed you meant the compositing layer but Wikipedia (http://en.wikipedia.org/wiki/Quartz_(graphics_layer)) helpfully mentions that both the 2D rendering engining and the Quartz Extreme compositor are sometimes just lumped together as "Quartz". Confusing! So I'm not really sure which you mean ;-)
I'm not clear from the Wikipedia articles whether GL acceleration is yet used by default for Quartz 2D, the rendering engine. though of course the Quartz Extreme Compositor has been doing that for years.
Anyhow, I was going to note that - if you discount X+compiz or whatever as being too heavyweight to be equivalent - the Wayland display server (http://groups.google.com/group/wayland-display-server) is the nearest Linux-land thing I'm aware to Quartz Extreme and it's a pretty neat project at that. Cunningly, Wayland reuses a *lot* of existing X.org infrastructure, it looks like it should be able to support an accelerated X server efficiently as a client *and* they have ideas for what it could be used for even if the rest of the world don't start porting their toolkits to it. So it's a fairly exciting piece of work for the future of display systems on Unix-likes.
Nearest thing to Quartz 2D would seem to be things like Cairo and QT's Arthur. They've been around for a while; I know Cairo can render using GL and would be amazed if Arthur couldn't.
I've no idea what Android runs for its display stack but I'd think that Chrome OS, running on bigger hardware, will have the option of running desktop-class servers and libraries like this. I can't see a move to Wayland by anybody *just* yet but perhaps it's viable for a future revision.
In the meantime, if Google's NeatX makes more seamless, higher performing remote desktop available to more people - that's awesome. One day I might even run it on my server and access it from a netbook - running Chrome OS, perhaps.
Re:FreeNX (Score:3, Informative)
And it works quite well. Around here, it is the standard solution when one needs to run engineering applications (on Linux) from home. Our home machines have Windows, but NoMachines has quite a nice NX client for Windows. As far as efficiency and general "snappiness" it comes quite close to Windows Remote Desktop, but works well with a Linux host.
Two thumbs up for Google. Maybe they can fix some of the annoying bugs. The NoMachine NX client does NOT work well with two monitors. They claim that this is a limitation of Cygwin (which is apparently a core part of NX client). If Google fixes this, they will have my undying gratitude.
Re:neatx client (Score:3, Informative)
http://blog.gwright.org.uk/articles/2006/08/23/qtnx-ready-for-public-consumption [gwright.org.uk]
Re:Long time user (Score:4, Informative)
Re:Long time user (Score:4, Informative)
I assure you that I *can* read, and I am sure you can too [nomachine.com]:
Re:StartUp/Shutdown Time (Score:3, Informative)
> my applications would be right were I left them, continuing on as if I'd never left
That's because you never left. That's just how VNC works by default.
> With NX, I'd connect, I'd go through a big start-up process
That's just how NX works by default. It creates a new session every time, while VNC creates sessions on start up and keeps them open. Did you consider looking this up at all? I believe that NX can be made to act like VNC however.
Re:Sucks to be NoMachine (Score:2, Informative)
No, it's the other way around, just like neatx.
Steve, Neatx project lead
Re:FreeNX (Score:2, Informative)
To be fair, the NX compression libraries by NoMachine resolves those issues. Neatx just makes it possible to use these libraries without relying on non-open-source'd code.
Steve, Neatx project lead
Re:NIH (Score:4, Informative)
Good question -) However, have a look at the different language breakdowns between the codebases.
FreeNX:
5.4k lines of bash
233 lines of C
102 lines of expect
Neatx:
5.7k lines of python
400 lines of C
54 lines of bash
The bash in neatx is there to provide wrapping of the python code, so that any unhandled errors etc are logged. It's a belt-and-britches approach.
Steve, Neatx project lead
Re:Still requires creation of user "nx"? Noooooo! (Score:2, Informative)
Actually the "nx" user isn't required, neatx supports operating without. However, NoMachine's nxclient doesn't support this, as it assumes that it should always log in as the "nx" user. So, if you're using !M's nxclient, you need to do a small bit of modification client-side. Here's an example of what to do client-side (though the beginning of the post is specific to FreeNX): http://www.felipe-alfaro.org/blog/2009/01/18/freenx-usermode-authentication-and-mac-os-x/ [felipe-alfaro.org]
Steve, Neatx project lead
Re:Good news well done Google. Another option is x (Score:3, Informative)
Replying here to both your post and the one you replied to:
As I understand it, Xpra's cunning hack is to run a real X server (such as Xvfb, which just "displays" to some memory for debugging purposes - or even Xvnc (!)) somewhere. Then the Xpra server registers itself as a compositing manager (so the complete contents of windows get handed to it for compositing). The server uses XDamage (notification on bits of windows that changed, I think) to get told when some contents change, then reaches into the window content it's being asked to composite and squirts that over the network. The client side, speaking *very* loosely, just displays windows and fills them with the bitmapped content it's being sent by the server. Nice thing here is that it's windowing aware (unlike VNC) so can forward rootless apps but it doesn't need to screen scrape or proxy the X connections themselves. There's more cleverness in the implementation than I've described, in order to make interaction, etc work. But that's the basic trick.
Now, the thing I'm wondering - and I think there *is* a reason but I can't remember what it is... I'd like a normal compositing WM on my desktop to be able to take over this role. So it would act like a normal WM to me whilst I'm using my desktop but if I connect remotely it'll be able to send the bitmapped contents of windows to the remote system. One thing I can imagine being a problem is that when I resized windows at the "other end" they'd end up getting resize events locally too. But I could live with that, especially if the WM moved them back when I disconnect. I should ask on the Xpra mailing list, really.
If the thing could detect when an app is trying to accelerated video GL and switch to using some kind of lossy video codec to stream current content to the other end that would be even better.
NX via SSH (Score:3, Informative)
Let us not forget that FreeNX and NX in general appears to use SSH as it's only needed port allowing not only normal SSH terminal activity but also NX connectivity using only 1 port with default SSH encrypted packets so they cannot easily reconstruct the transmitted data in the event of an interception.
Still kind of a mess... (Score:3, Informative)
So first, this still requires nomachines nx core, seems like, so it cannot claim to be completely pure.
Secondly, though they don't use Tcl expect, they are still doing the same exact thing, but in python. The problem here is when writing expect stuff, you are already in a bad spot as unexpected input comes up. For example, in trying neatx, I already noted their expect code wasn't expecting a password prompt common in a kerberos environment. And when things go off-the-rails in an expect context, you return to the client an extremely unhelpful, obscure error.
Thirdly, it is all trying to interoperate with NX's rather unfortunate mode of operation where the service is accessed via ssh to another user, even though the goal is just to 'su' to the user you want to be. Considering nx requires you ta have a normal *nix account anyway, I don't get why they implemented this goofy nx user.
NX has long been a source of some frustration to me. FreeNX has been promising, but subject to all sorts of weirdness (sessions suspended being lost because they go to closed, suspneded sessions that cannot be resumed for unknown reasons, etc). I really really want the technology NX has to offer, but all the implementations I've tried thusfar have design decisions that are unfortunate and implementations with mysterious bugs and a user community that is unfortunately weak.
Almost all of this is the fault of the code at the NeatX/FreeNX layer rather than the core. But given the inherently goofy design they are having to emulate, I can't blame them. I would *LOVE* to see an implementation throw out Nomachine's architecture and do a more sane, per user scheme.