Hi
Firstly, apologies for not addressing this issue sooner.
There are several contributing factors to the delays in WinGate. As a bit of background, I'll tell you what we've been doing and why. Some of the work we have been doing will not have any obvious impact on functionality, so you may ask why do we spend time on it?
Restructuring
The first one is major restructuring. Since 1995, WinGate has been a monolithic application. This means basically a single .exe file. Any changes internally in the engine could affect many areas of operation, and this created more and more problems for development as the product evolved and increased in complexity. As time went by, the rate at which new major features were released got slower and slower and slower, and the beta periods for new major versions got longer and longer. We decided enough is enough, and so embarked mid last year on a major restructuring initiative. Initially this included only new functionality (some seen in the preview last July), but since then compelling reasons have caused us to extend this to many core existing functions, such as the user database.
Some functionality in WinGate has been stripped out into separate modules (DLLs), and new functionality has been created in new modules. The main benefits of this include:
* Greatly eases management of the development, deployment, and maintenance processes
* Isolates functional modules from each other, reducing code interdependencies and complexity.
* Creates new opportunities for additional functions and development by Qbik and 3rd parties
* Greatly increases the rate at which new features can be developed and released.
* Provides an opportunity (in refactoring code) to address other long-standing issues
* Forces complete definition of a fixed interface between client and provider code. This allows changing the implementation of a feature without affecting client code.
GUI overhaul
Again, this does not provide as much benefit to existing users as it does to new users. We get a lot of feedback from a lot of people that WinGate is difficult to understand and use. Improving usability will therefore not only benefit existing and new users, but we hope also increase conversion rates between trialling and purchasing customers.
Further, the GUI overhaul has involved the componentisation of the GUI as well as the engine. Many key functions in WinGate and GateKeeper are modules. Modules are able to seamlessly integrate into the GUI, allowing us to ship additional products which extend WinGate in a completely integrated fashion (e.g. extend the navigation in WinGate, provide GUI for new functionaliy, extend key dialogs, menus etc).
New HTTP proxy with new filtering interface
Our research indicates that the single most important functionality users require of WinGate is HTTP proxying and access control.
The current HTTP proxy in WinGate 6.2.2 is derived from an HTTP/1.0 proxy originally developed in 1996. Since then, several features have been integrated, including support for web serving, CGI, FTP browsing with data scanning, content filtering, chunking, persistent connections, and HTTP auth (including NTLM). Addition of all these features over time left the HTTP proxy structure in a less than ideal state for maintenance, and supporting certain problem issues became increasingly difficult.
Furthermore the filtering interface (with dripfeeding etc) was not extensible enough to support certain types of filter functionality.
The new proxy and new filtering API allow much more flexibility for filter components. In fact HTTP caching is now provided by a filter component (which opens possibilities of options for cache provision, such as shared caches, and advanced cache features). Filters have the ability to do things like altering requests, or modifying responses or serving responses etc, which means it's now possible to write HTTP filters such as mod_rewrite, compression, access control, content control etc.
The restructuring of the core HTTP proxy enabled us to provide better performance also for basic proxying, better support for HTTP/1.1 extensions, and provide more capabilities to the new policy framework.
New Policy Framework
The new policy framework is not like anything you will have seen before. Even in the preview, which showed an early prototype of it, you could start to see its power.
Traditionally policy has been an access control issue. You would set up policy to either allow something or block it.
We don't view policy as simply access control. A real world policy covers any potentially desirable response to a situation (event), not just allow or deny. I always take the example of a child going to a parent and asking for an apple. In a conventional style policy, the possible responses are yes or no - that's it. In the real world however, you might want to offer an alternative (like say a banana) or take some other action (put the child in time out for asking for an apple 10 times in 10 minutes). Restricting policy outcomes to an arbitrary set of yes or no / allow or deny is an arbitrary restriction traditionally chosen to simplify software. We've broken that restriction - we believe enabling sophistication in policy without sacrificing simplicity.
Policy can therefore be used not just for access control, but also to conditionally modify request parameters, as well as perform additional auxiliary actions. The structure of a policy overall is a sequence of decisions used to arrive at any number of conclusions / results. The result can be allow or deny, but can also be redirect, perform other additional tasks, or allow and set other additional conditional restrictions.
For the example of load-balancing, it's possible to set session variables per request in policy. Some of the many available session variables are those relating to how it will connect down-stream, such as the connection method (through a proxy or directly), and which gateway / internet connection it will use. So, it's now possible to write a WinGate policy to specify upstream gateway (connection to use) on a per-request basis considering any available data about the request.
This means for example you can use policy to create real policies such as:
* Requests from certain client IPs go through certain gateways
* Requests from certain user accounts go through certain gateways
* Requests at certain times go through certain gateways
* Requests for certain sites go through certain gateways
* any combination of the above and more.
What's more, the mappings for say URL to gateway, or username per URL per gateway (or whatever combination you like), can be stored in an ODBC-compatible database. ODBC-compatible databases have the benefits of being able to be shared amongst multiple WinGate services or even multiple WinGates in a cluster, and be accessed and managed by external applications (such as a website for administration).
Anyway, I'm only covering some of the new features (there are more), and only giving these as an indication of what we've been doing so that one can see that
a) Qbik is fully commited to the development of WinGate, and is aggressively developing new technologies for it.
b) we haven't been sitting on our thumbs.
Of course we apologise for how long it has taken to get to where we are, and there is still a way to go before we can release what we have. It's pretty tough having such exciting features and them not being in a state to show off to customers.
On that note, if there are customers that are willing to take a look at what we have (pre-beta), we'd love some feedback on the direction.
The key thing you're interested in is when though. At the moment our best-estimate for release of a beta is still 6 - 8 weeks out from now.
We realise some customers have been purchasing renewals of version protection, and we have announced before our intention to ensure this money is not wasted. The current plan is to extend version protection for anyone who has ever purchased a renewal to cover them until at least the next version is released. We'll be sending emails out to affected customers within the next couple of days. In the meantime, if you have previously paid to renew version protection, and that protection is about to expire, don't renew it, we'll be extending it for you.
regards
Adrien