Free Pascal コンパイラ（通称FPC。以前はFPK Pascal）はオープンソースのObject Pascal コンパイラである。

概説 
Free Pascalは、複数のCPUアーキテクチャ（32ビット/64ビット）、複数のオペレーティングシステム (OS) をサポートするコンパイラであり、広く用いられる各種システム向けに移植されている。言語仕様はObject Pascalに加えて、Turbo Pascal、Delphi、そして過去に存在したMacintoshコンパイラの方言に対応している。

Free Pascalは以前、FPK Pascalの名で知られていた。これは "Free Pascal Kompiler" の略ではなく、実際は作者のイニシャルから名をとったものである (Florian Paul Klämpfl)。その後、プロジェクトの参加者が増えたため、誤解を避ける目的から1997年の終わりに、Free Pascal Compiler (FPC) と改名した。

FPCのドキュメントは詳細で、マニュアルは合計1800頁に及ぶ。

Free PascalにはTurbo Pascal風のテキストモードの統合開発環境 (IDE) があるが、メインテナンス要員が足りないために、時として使い物にならなくなっていた。2005年の後半から改善の努力が続けられ、2006年に入ってからは、大きなバグは修正済みとなり、リリースしてもよい程度の品質になった。macOS用のFPCはコマンドラインからはもちろん、Xcodeの一部として動作させることもできる。

Turbo Pascal や Delphi 同様、FPCは Pascal コードの中にアセンブリ言語コードを記述できるような優れた仕組みをもっている。FPCの内蔵アセンブラは、複数のアーキテクチャと表記法をサポートしている。

ライブラリは、基本プログラムに必要な「Run-Time Library (RTL)」と、多種多様なクラスや（データベースなどの）非ビジュアルコンポーネントで構成された「Free Component Library (FCL)」がある。

Free Pascal コンパイラを採用したオープンソースのIDEであるLazarusには、Delphi の Visual Component Library (VCL) と高い互換性を持つLazarus Component Library (LCL) があり、Free PascalのRTLとFCLを組み合わせてGUIアプリケーションを開発できる。

言語仕様 
FPCはPascalの方言のうちで、デファクトスタンダードとなっているBorland PascalとDelphiを採用している。バージョン2.0以降、Delphi7互換性は継続的に実施または改善された。

また、Mac OS（macOSを含む）とのインタフェースを容易にするため、若干ながら Apple Pascal 文法をサポートするための努力も行われてきた。

コンパイラには複数の「コンパイル互換モード」を持っており、Default（ANSI/ISO標準）モード、Delphi互換モード、Turbo Pascal互換モード、FPCモード、Object Pascalモード、Mac Pascalモードがある。

歴史

はじまり 
FPC は ボーランド が「Borland Pascal 8は出さない、次の版はWindows専用になる（それがDelphi）」と明らかにしたときに出現した。学生であった Florian Paul Klämpfl は自分でコンパイラを作成しようと着手したのである。コンパイラは最初から Turbo Pascal 方言を用い、同時期にDJGPPプロジェクトが作成したGO32V1DOSエクステンダ向けの32ビットコードを生成した。当初のコンパイラ自身は Turbo Pascal でコンパイルされた 16ビットDOSアプリケーションであった。二年後に、コンパイラは自分自身をコンパイルできるようになり（ブートストラップ）、32ビットアプリケーションになった。

拡大 
最初の32ビットコンパイラがネットに投稿されると、協力者が現れるようになった。数年後にはMichael van Canneytの手でLinuxに移植された（Kylixより5年早い）。DOS版からは、OS/2 + EMX（OS/2にUNIX類似の環境を提供するライブラリ）に移植された。DOS版の改良はその後も進み、GO32V2を用いるようになった。これらの成果はリリース0.99.5としてまとめられ、それまでの版より広い範囲で用いられるようになった。これがTurbo Pascal互換性にとどまっていた最後の版で、後のものは Delphi互換モードを追加していくことになる。リリース0.99.5はモトローラ680x0 (68k) 用にも移植された。

リリース0.99.8で、Win32がターゲットとして加えられ、Delphiの仕様と協調する作業が始められた。1.0版の安定化が進められ、2000年6月に記念すべき公開にこぎ着けた。1.0.xシリーズ（後にもバグ取りと安定化が加えられ、1.0.10は2003年6月に公開された）は企業にも教育機関にも広く用いられた。1.0.xでは、68k向けの移植が再度行われ、多くの68k用UNIXやAmiga用の安定なコードを生成するようになった。

新時代 
後に1.0.xとなる安定化作業及び68k向け移植の際に、コード生成部分にの設計上の限界がはっきりした。二つの基本的な問題があり、一つは、新しいプロセッサをサポートしようと思うと、コードジェネレータを根本的に書き直す必要があったこと、レジスタ割当の原則（ブロックをビルドする際、常にレジスタを3つ開けておく）が管理しにくく、自由度を欠いていたことである。

これらの理由から、1999年12月に1.0.xシリーズから枝分かれする形で1.1.xシリーズが作られた。最初はコンパイラの各部分のクリーンアップ及び再設計と書き直し、次いでコードジェネレータとレジスタアロケータの書き直しが行われた。余得として、不足していたDelphi互換性が向上した。

1.1.xの改良は遅かったが、着実であった。2003年遅くにはPowerPC (PPC) への移植が着手され、ARM及びSPARCへの移植も2004年の夏から秋にかけて行われた。AMD64への移植は2004年早くに行われた。AMD64への移植によって、64ビットコンパイラとしての機能が加わった。

2003年11月に、1.1.xの最初のベータ版が公開され、版名を1.9.0とすることにした。その後すぐに1.9.2、1.9.4が公開された。1.9.4はMac OS Xをサポートした記念すべき最初の版であった。

その後、1.9.6が2005年1月、1.9.8が2005年2月、2.0.0が2005年5月、2.0.2が2005年12月に公開された。

2012年1月に公開された 2.6.0 は、ネストした型、クラス変数、クラス/型ヘルパー、レコードのfor..inなどが実装され、Delphi互換性が向上した。さらにMac OS XとiOSを対象としたObjective Pascalの方言もサポートした。2013年2月に公開された 2.6.2 は、ARMアーキテクチャコンパイラの改良およびNetBSDとOpenBSDに関する多数の不具合修正が行われた。最新安定版の2.6.4（2014年3月公開）ではデータベース接続パッケージfcl-dbに対して多くの改良と修正が行われた。

バージョン 3.0の新機能 

言語
名前空間ユニット（ドットを含むユニット名をサポート, Delphi互換）
動的配列コンストラクタ（クラスのCreate関数のような生成関数をサポート, Delphi互換）
Default関数（指定した型の初期値を返す関数, Delphi互換）
型ヘルパー（文字列リテラルや数値リテラルのような基本型のヘルパー, Delphi互換）
コードページ情報を含むANSI文字列（Delphi互換）

コード生成
Class field reordering
Removing the calculation of dead values
Shortcuts to speed up floating point calculations
Constant propagation
Dead store elimination
Node dfa for liveness analysis

ユニットとパッケージ
TDBF - Visual FoxProファイルをサポート
Bufdataset - ftAutoIncフィールドをサポート
TDBF, bufdataset (and descendents such as TSQLQuery) allow escaped delimiters in string expression filter
TODBCConnection(odbcconn) - 64ビットODBCをサポート
TZipper - zip64フォーマットをサポート
より多くのファイル関連RTLルーティンでマルチコードページとUnicodeをサポート
SQL parser/generatorの改良

ツールなど
新しいPas2jniユーティリティ

macOS / iOS
新しいiosxlocaleユニット

 新しいコンパイラターゲット
Java Virtual MachineとDalvik（Android）のJavaコード生成をサポート
AIX（5.3以降）をサポート
16ビットリアルモードMS-DOSをサポート
Android（ARM、x86、MIPS）をサポート
armhf EABIをサポート
AROS（i386-ABIv0、i386-ABIv0-on-trunk）をサポート

ターゲットとなるシステム