2026-04-02Β·8 min readΒ·sota.io team

Deploy Free Pascal to Europe β€” Niklaus Wirth πŸ‡¨πŸ‡­ + Anders Hejlsberg πŸ‡©πŸ‡° Pascal Heritage on EU Infrastructure in 2026

In 1983, a 23-year-old Danish programmer named Anders Hejlsberg wrote a Pascal compiler from scratch, in assembly language, in Copenhagen. Borland sold it for $49.95. Turbo Pascal 1.0 compiled programs in seconds β€” ten to fifty times faster than the competing CP/M compilers of the time. It ran on the new IBM PC, it shipped with an integrated editor, and it made programming accessible to a generation of European software engineers who could not afford expensive mainframe tooling. Anders Hejlsberg would go on to create Delphi, then C# at Microsoft, then TypeScript β€” but Turbo Pascal was where he invented the fast compiler loop that shaped modern software development.

The language that Turbo Pascal implemented was Pascal, created by Niklaus Wirth πŸ‡¨πŸ‡­ at ETH ZΓΌrich in 1970. Wirth designed Pascal as a teaching language to demonstrate structured programming β€” programs composed of clear control structures, not GOTO statements. He wanted a language where the structure of the code reflected the structure of the problem. Pascal became the dominant teaching language of European computer science departments throughout the 1970s and 1980s. Wirth received the Turing Award in 1984. He spent his entire career at ETH ZΓΌrich.

Free Pascal (FPC) is the production-ready open-source continuation of this tradition. It was started in 1993 by Florian KlΓ€mpfl πŸ‡©πŸ‡ͺ in Germany and has been maintained by a European-majority team ever since. Free Pascal compiles Object Pascal β€” the same language as Delphi β€” to native binaries for Linux, Windows, macOS, ARM, and RISC-V. It is how thousands of European enterprises maintain and extend their Delphi-era codebases on modern infrastructure. It is how new Pascal code gets written today.

Niklaus Wirth and Structured Programming at ETH ZΓΌrich

Niklaus Wirth πŸ‡¨πŸ‡­ was born in Winterthur, Switzerland in 1934. He studied at ETH ZΓΌrich, received his PhD from the University of California at Berkeley in 1963, and returned to ETH as a professor in 1968, where he remained until his retirement in 1999. He died in January 2024 at age 89, at his home near ZΓΌrich.

Wirth designed Pascal between 1968 and 1970. The language was a response to the complexity of ALGOL 68 β€” which was powerful but too complicated β€” and to the unstructured programming habits encouraged by languages like FORTRAN and BASIC. Pascal enforced structured control flow: if-then-else, while, for, repeat-until, case. Programs had a clear top-down structure: constants, types, variables, and procedures declared in order, a main program that called them. Data types were strict and checked at compile time. The compiler could reject incorrect programs without running them.

The immediate practical result was that Pascal programs were easier to read, easier to teach, and easier to verify than FORTRAN programs. By the mid-1970s, Pascal had become the primary teaching language at ETH and was spreading to universities across Europe and North America. The UCSD Pascal system, Borland Turbo Pascal, and Apple's first Pascal compiler were all built on Wirth's design.

Wirth did not stop at Pascal. He went on to create Modula (1975), Modula-2 (1978), and Oberon (1987) β€” each a refinement of Pascal's ideas. Oberon removed features, simplified the language, and added modules as the primary unit of compilation. The Go programming language's module system traces direct influence from Wirth's module design. His principle was consistent across all these languages: simplicity is not the absence of power, but the absence of unnecessary complexity.

Anders Hejlsberg and the Turbo Pascal Revolution

Anders Hejlsberg πŸ‡©πŸ‡° was born in Copenhagen in 1960. He grew up programming on a Xerox 820 and a Poly-88. In 1980, at age 20, he wrote a Pascal compiler in assembler for the Nascom 2 microcomputer. By 1982 he had moved to Borland International, where he spent the next decade.

Turbo Pascal 1.0, released in November 1983 for CP/M, was priced at $49.95 when competing Pascal compilers cost $400-1000 and ran on mainframes. It included an integrated editor β€” you wrote and compiled from the same screen. The compilation was fast because Hejlsberg's one-pass compiler read the source code once and generated code immediately, without building an intermediate representation. Programs that took minutes to compile elsewhere compiled in seconds.

Turbo Pascal ran on the IBM PC, which was rapidly penetrating European offices and universities. The combination of low price, high speed, and the integrated development experience made Turbo Pascal the standard for a generation of European developers. Germany, France, the Netherlands, and the Scandinavian countries saw entire software industries built on it. German accounting software, Dutch control systems, Danish business applications β€” the 1980s enterprise software that still runs in EU companies today was frequently written in Turbo Pascal or its Object Pascal successor.

In 1995, Hejlsberg designed Delphi β€” the Object Pascal RAD (Rapid Application Development) environment that added visual component design and a class library to Turbo Pascal's compilation model. Delphi defined enterprise development in Europe through the late 1990s and 2000s. He then joined Microsoft in 1996, where he designed C# (2000) and TypeScript (2012). The clean type system, the fast compilation, and the IDE integration that Hejlsberg brought to C# and TypeScript originate directly in what he built at Borland.

Free Pascal β€” The European Open Source Continuation

Florian KlΓ€mpfl πŸ‡©πŸ‡ͺ began writing Free Pascal in 1993 while studying at the University of Erlangen-Nuremberg in Germany. The motivation was straightforward: he wanted a free Pascal compiler for his 386 PC that was compatible with Turbo Pascal. The first release supported DOS and produced 386 protected-mode code. By the late 1990s, Free Pascal had grown into a comprehensive compiler supporting multiple targets and implementing Object Pascal β€” full Delphi compatibility.

The core development team remains predominantly European:

Free Pascal 3.x supports:

The generated binary is self-contained. There is no runtime dependency except the C library. A Free Pascal web service compiled for Linux/amd64 can run from a FROM scratch Docker container if statically linked.

Web Services with fpWeb

Free Pascal's standard library includes fpWeb β€” an HTTP server framework that supports CGI, FastCGI, and standalone HTTP mode. The standalone mode creates a direct TCP listener, making fpWeb deployable in a standard Docker container without a reverse proxy for internal services.

A minimal fpWeb JSON API:

program FPWebServer;

{$mode objfpc}{$H+}

uses
  fpwebsrv, httpdefs, fphttp, sysutils, fpjson, jsonparser;

type
  TItemsModule = class(TCustomHTTPModule)
  public
    procedure HandleRequest(ARequest: TRequest; AResponse: TResponse); override;
  end;

procedure TItemsModule.HandleRequest(ARequest: TRequest; AResponse: TResponse);
var
  Data: TJSONArray;
  Item: TJSONObject;
begin
  if ARequest.PathInfo = '/health' then
  begin
    AResponse.Content := '{"status":"ok"}';
    AResponse.ContentType := 'application/json';
    AResponse.SendResponse;
    Exit;
  end;

  if (ARequest.Method = 'GET') and (ARequest.PathInfo = '/api/items') then
  begin
    Data := TJSONArray.Create;
    try
      Item := TJSONObject.Create(['id', 1, 'name', 'Example Item', 'lang', 'Free Pascal']);
      Data.Add(Item);
      AResponse.Content := Data.AsJSON;
      AResponse.ContentType := 'application/json';
    finally
      Data.Free;
    end;
    AResponse.SendResponse;
  end else
  begin
    AResponse.Code := 404;
    AResponse.Content := '{"error":"not found"}';
    AResponse.ContentType := 'application/json';
    AResponse.SendResponse;
  end;
end;

var
  App: TFPHTTPApplication;
begin
  App := TFPHTTPApplication.Create(nil);
  try
    RegisterHTTPModule('/', TItemsModule);
    App.Port := StrToIntDef(GetEnvironmentVariable('PORT'), 8080);
    App.Threaded := True;
    WriteLn('Free Pascal fpWeb listening on port ', App.Port);
    App.Run;
  finally
    App.Free;
  end;
end.

A PostgreSQL connection using the pgsql unit from Free Pascal's database library:

uses
  sqldb, pqconnection, fpjson, sysutils;

function QueryItems(const DBURL: string): TJSONArray;
var
  Conn: TPQConnection;
  Query: TSQLQuery;
  Trans: TSQLTransaction;
begin
  Result := TJSONArray.Create;
  Conn := TPQConnection.Create(nil);
  Trans := TSQLTransaction.Create(nil);
  Query := TSQLQuery.Create(nil);
  try
    // Parse DATABASE_URL: postgres://user:pass@host:port/dbname
    Conn.DatabaseName := ExtractDBName(DBURL);
    Conn.UserName     := ExtractDBUser(DBURL);
    Conn.Password     := ExtractDBPass(DBURL);
    Conn.HostName     := ExtractDBHost(DBURL);
    Conn.Transaction  := Trans;
    Trans.DataBase    := Conn;
    Conn.Open;
    Trans.StartTransaction;

    Query.DataBase := Conn;
    Query.SQL.Text := 'SELECT id, name, created_at FROM items ORDER BY created_at DESC LIMIT 50';
    Query.Open;
    while not Query.EOF do
    begin
      Result.Add(TJSONObject.Create([
        'id',         Query.FieldByName('id').AsInteger,
        'name',       Query.FieldByName('name').AsString,
        'created_at', Query.FieldByName('created_at').AsString
      ]));
      Query.Next;
    end;
    Trans.Commit;
  finally
    Query.Free;
    Trans.Free;
    Conn.Free;
  end;
end;

The pqconnection unit wraps libpq β€” the official PostgreSQL C client library. Free Pascal's SQL database layer provides a unified interface across PostgreSQL, MySQL, SQLite, and Oracle connections.

Dockerfile for sota.io Deployment

Free Pascal's multi-stage build separates the compiler (large) from the runtime (small):

FROM fpc:3.2.2 AS builder

WORKDIR /app
COPY src/ ./src/
COPY fpmake.pp ./

# Compile with optimisations for Linux/amd64
RUN fpc -O2 -Tlinux -Px86_64 \
        -Fu/usr/lib/fpc/3.2.2/units/x86_64-linux/* \
        -o server \
        src/server.pas

# ---- runtime stage ----
FROM debian:bookworm-slim

# fpWeb standalone mode needs libpq for PostgreSQL
RUN apt-get update && apt-get install -y \
    libpq5 \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY --from=builder /app/server ./server

EXPOSE 8080

CMD ["./server"]

The runtime image is a standard Debian slim with only libpq5. No Pascal runtime is needed β€” Free Pascal produces a standard native Linux binary. The image size is typically 80-100MB (Debian slim + libpq); for statically linked builds without PostgreSQL, it can be reduced to under 10MB.

Environment variables Free Pascal applications read via GetEnvironmentVariable:

EU Compliance: GDPR, EU AI Act, and Healthcare

GDPR Article 5(1)(f) β€” Integrity and Confidentiality. Pascal's strict type system prevents the buffer overflows and type confusions that produce data leakage vulnerabilities in C and C++. Every array access is bounds-checked at runtime by default. Every pointer operation on managed types is null-checked. A Pascal program cannot accidentally cast an integer to a pointer and write to an arbitrary memory address. For applications processing EU personal data, the type system is a structural guarantee against a class of memory-safety vulnerabilities.

GDPR Article 25 β€” Data Protection by Design. Pascal's record types map directly to the data structures of the problem domain. You define a TPersonRecord with exactly the fields needed, no more. The compiler rejects assignments between incompatible record types. The explicit, compile-time-checked data model makes it straightforward to implement GDPR's data minimisation principle in the type system itself.

EU AI Act Article 13 β€” Transparency. For regulated AI systems, Free Pascal's static compilation produces fully deterministic, inspectable binaries. There is no garbage collector introducing non-deterministic pauses. There is no just-in-time compiler changing the execution profile between runs. The relationship between source code and binary behaviour is direct and auditable β€” critical for AI systems that must demonstrate consistent behaviour across assessments.

EU Healthcare β€” IEC 62304 Medical Device Software. Free Pascal is used in European medical device software development. The strong typing, deterministic memory model, and native compilation without a managed runtime are required properties for IEC 62304 Class C (life-supporting device software). German and Dutch medical device manufacturers have deployed Object Pascal codebases in DICOM image processing and HL7 healthcare data pipelines for decades. The Free Pascal compiler's deterministic output satisfies certification requirements that garbage-collected languages cannot meet.

DACH Enterprise Legacy Migration. The German-speaking business software market has a high concentration of Delphi/Object Pascal applications in ERP, accounting, and document management systems. DATEV πŸ‡©πŸ‡ͺ (Nuremberg, 13 million users, Germany's largest cooperative for tax advisors) uses Delphi-heritage codebases. Lexware πŸ‡©πŸ‡ͺ (Freiburg, SME accounting) has Delphi roots. Free Pascal provides the compilation path to bring these applications to Linux containers and EU cloud infrastructure without rewriting.

EU Enterprises and Free Pascal Heritage

The Delphi/Free Pascal ecosystem is particularly strong in Central and Eastern Europe, where Borland's pricing strategy made Object Pascal the language of choice for the software industries that emerged in the 1990s:

Germany πŸ‡©πŸ‡ͺ β€” DATEV (tax software, 8,000 employees, Nuremberg), Lexware (SME accounting, Freiburg), numerous Mittelstand software vendors in manufacturing automation and ERP. The Hannover Messe industrial automation ecosystem includes Delphi/FPC-based control software.

Netherlands πŸ‡³πŸ‡± β€” Financial services and healthcare software. The Dutch healthcare administration system (Zorgdomein) has components with Delphi heritage. AFAS Software (Leusden) β€” HR and ERP for Dutch enterprises β€” has Object Pascal codebases.

Austria πŸ‡¦πŸ‡Ή β€” Vienna-based enterprise software including Fabasoft (electronic document management, listed on Vienna Stock Exchange) uses Delphi. Austrian manufacturing SMEs in the Steyr/Linz industrial corridor maintain FPC-based production systems.

Czech Republic & Slovakia πŸ‡¨πŸ‡ΏπŸ‡ΈπŸ‡° β€” Strong Delphi developer communities. Numerous accounting (Pohoda, Money S3) and healthcare information systems written in Object Pascal.

Belgium πŸ‡§πŸ‡ͺ β€” Jonas Maebe (FPC core team, Ghent) reflects the Belgian contribution to the compiler itself. Belgian payroll and HR software frequently traces to Delphi-era development.

Peter Vreman's πŸ‡³πŸ‡± work on the Free Pascal linker and debugger represents decades of Dutch investment in keeping Object Pascal viable as a deployment-ready language. The compiler is not an academic curiosity β€” it is production infrastructure for European enterprise software.

Deploy Free Pascal to Europe with sota.io

sota.io runs on Hetzner infrastructure in Germany β€” the country where the Free Pascal compiler was born and where the largest concentration of Delphi enterprise applications runs today.

Prerequisites:

Deploy steps:

  1. Create a new project in the sota.io dashboard. Select "Dockerfile" as the build method.

  2. Set environment variables:

    • DATABASE_URL: your PostgreSQL connection string (sota.io provides managed PostgreSQL)
    • PORT: 8080 (set automatically by sota.io)
  3. Push your code. sota.io builds from the Dockerfile in your repository root. The multi-stage build compiles your Pascal source and produces a lean runtime image.

  4. Configure health checks. sota.io expects a /health endpoint returning 200. The fpWeb handler above provides this at /health.

  5. Scale considerations. Free Pascal's native binary has a typical startup time under 10ms β€” significantly faster than JVM or .NET runtimes. Horizontal scaling adds new instances in seconds. For applications migrated from Delphi, the threading model (Application.Threaded := True) maps directly to the request concurrency model sota.io uses.

Database connection. sota.io provisions PostgreSQL in the same Hetzner region as your application. The DATABASE_URL environment variable gives you the connection string in standard PostgreSQL URI format: postgres://user:password@host:5432/dbname.

Niklaus Wirth designed Pascal so that programs could be written clearly and understood easily. Anders Hejlsberg showed that a clear language could also compile fast and cost less than dinner. Florian KlΓ€mpfl showed that it could be maintained freely, by Europeans, for three decades, without losing correctness or performance. The EU enterprise software that runs on this heritage is not going away β€” and now it can run in a Docker container, on German infrastructure, with GDPR-compliant managed PostgreSQL.


See Also

Deploy any language to Europe with sota.io.