RoadMap

PortFusion™ is a minimalistic, cross-platform, transport-layer distributed reverse / forward proxy for TCP written in Haskell + LLVM and released under GPLv3.

A single package that makes the most of each platform by tapping into their unique capabilities, combining this power with an intuitive interface, beautiful design and Haskell's excellent support for unprecedented levels of concurrency and parallelism.

It strives for the smallest source code size while delivering maximum throughput with near zero overhead.

© 2011 - 2013 Cetin Sert



]-[ayabusa (はやぶさ) (Hayabusa)

is the next version of PortFusion, developed in Haskell.

PortFusion 0.9.3 ]-[ayabusa 1.0
Memory at Start-up ~14 MB ~0.7 MB
Memory at 1 Fusion ~30 MB (lots of jumps) ~1.0 MB (constant)
CPU usage at 1 Fusion ~2% 0%
OS Support Windows Windows, Linux, Mac OS X, BSDs
Language F# / C# Haskell (GHC/LLVM)
Dependencies .NET + F# Runtime none
Source Code Size 778 lines (several files) <500 (1 file)
Concurrency Model 1 OS thread per connection transparent asynchrony
Distributed Proxy Modes reverse reverse & forward
Local Proxy Modes forward
Distribution Technique Windows Communication Foundation native sockets API and special system calls of each OS
Deployment 2 .NET 4.0 CIL-code binaries 1 unified, native code binary for each OS/CPU
Binary Size 78.3 KB (34.3 KB + 44 KB) 1-3 MB
License GPLv3 GPLv3
Support SourceForge.net SourceForge.net, commercial

Every task in PortFusion ]-[ayabusa is carefully designed and engineered for absolute minimalism and maximum performance. Tasks are self-contained, compact descriptions of every day proxying operations. Each task is written using a minimalistic Haskell EDSL (embedded domain specific language). The EDSL provides a powerful tiny API that interacts with the OS.

In many respects, PortFusion ]-[ayabusa is breaking new grounds in Haskell network programming: the most efficient system calls are used on each platform – such as splice on Linux to move data between sockets in kernel space with zero copying.

Owing to this relentless pursue of utmost efficiency and best performance, PortFusion ]-[ayabusa continues to prove itself a wonderful research tool. It helps develop reference implementations of high-performance libraries for tapping into unique functionalities of each platform. These performance libraries are then released on Hackage under the more permissive BSD3 license and maintained in collaboration with the greater Haskell community.

Distributed Reverse Proxy Example

Command Lines

# ]-[ayabusa
@remote> PortFusion             ] 2000        [
@local > PortFusion 3389 server - 2000 remote [ 3389

# compare 0.9.3
@remote> PortFusionHost.exe       2000
@local > PortFusionClient.exe     2000 remote 3389=server:3389
# 0.9.3 does not follow the sequence charted below

Message Sequence Chart

The message sequence chart below corresponds to less than 30 lines of code (all shorter than 20 characters). ]-[ayabusa is basically a specification that just runs.

R.MSC

Distributed Forward Proxy Example

Command Lines

# new in ]-[ayabusa
@remote> PortFusion      ]        2000 [
@local > PortFusion 3128 ] remote 2000 - server 3128

Local Forward Proxy Example

Command Lines

# new in ]-[ayabusa
@local > PortFusion 3128 ]             - server 3128

↓ABANDONED↓

Seoul 서울

Seoul is the code name of PortFusion v1.0 written completely in .NET/F#!

Version Date Summary
1.0 2012-04 improved intense refactoring and careful modularization of core functionality
new unified executable for PortFusion host and client components
improved now no need for F# runtime (ships with FSharp.Core.DLL)
new command line interface (CLI) separated from core PortFusion logic
improved connection engines shared between host and client components
new environment links for front-end-independent settings & logging management
new high-performance type-safe logging implementation for all stream types
new ephemeral and persistent settings (re-)configuration options in CLI
new configurable automatic updates (off by default)
improved hardened security options (for plain-text protocols such as HTTP)
improved signed binaries to verify your copy comes from portfusion.sf.net
new Mono-dependent best-effort support for Linux, Mac OS X and BSDs

↑ABANDONED↑

Past Releases

Version Date Summary
0.9.3 2011-09-19 corrected a wrong assumption affecting SSH, S/FTP, VNC
0.9.1 2011-08-04 client configuration improved
0.9 2011-04-07 host and client stabilized
0.8.8 2011-04-02 initial release