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
is the next version of PortFusion, developed in Haskell.
|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|
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.
# ]-[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
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.
# new in ]-[ayabusa @remote> PortFusion ] 2000 [ @local > PortFusion 3128 ] remote 2000 - server 3128
# new in ]-[ayabusa @local > PortFusion 3128 ] - server 3128
Seoul is the code name of PortFusion v1.0 written completely in .NET/F#!
|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|
|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|