On 2/21/17 2:58 AM, Pierre Ossman wrote:
> No. The other HTML based viewer I know of is guacamole. I have no idea
> what features it has though.
Guac has similar authentication limitations to noVNC, and it's much
slower than noVNC (which is saying a lot, because noVNC is not very
swift to begin with.)
I have spent quite a bit of time with the noVNC code base. One of my
customers is very interested in the long-term prospects of optimizing
noVNC for the needs of performance-critical applications (3D
applications running with VirtualGL, mostly) and adding
TurboVNC/TigerVNC features to it, but currently that project is blocking
on two things:
(1) the inability to properly implement double buffering with the HTML 5
canvas. Basically the problem is that rendering in HTML 5 is
asynchronous. In order to properly implement a high-speed VNC viewer
with double buffering, you have to maintain a back buffer, incrementally
decode the RFB rectangles into that buffer as they arrive, then blit the
buffer to the screen at the end of the RFB framebuffer update. But that
requires the ability to block until the previous frame has finished
drawing, else you risk stomping on some of those pixels with the new
frame that you are decoding (and yes, I've tried a dual-canvas
approach-- way too slow.)
(2) performance. noVNC just doesn't decode and render fast enough (even
when using Chrome's JS acceleration) for the needs of 3D applications.
I'm hoping this will improve over time, but frankly, from a programmer's
point of view, Java applets were a way better solution, and I'm
disappointed that browser developers don't even give users and
developers that option anymore.
If I could get past the performance/double buffering hurdles, then I can
probably secure funding to add protocol features to noVNC such as
VeNCrypt, the RFB flow control extensions, etc. However, one important
caveat is that those features are implemented using GPL v2 code, so
adding them to noVNC would likely require changing the license of that
product to GPL v2 (it is currently MPL.) The GPL is such that it
extends not just to the literal code but to any "straightforward ports"
of that code to another language, so unless it was possible to implement
VeNCrypt and the other protocol extensions from first principles
(referring only to the spec and not basing the implementation on any of
the TigerVNC code), then it wouldn't be possible to maintain the current
noVNC license. That means that the noVNC developers would not likely
accept the modifications, and it would be necessary to fork the project.
DRC