以下は簡単なFortranのプログラムです。
[https://onlinegdb.com/0d69HDBoV5 コンパイル・実行例]:
program hello
    print *, "Hello World!"
end program
実行結果:
 Hello World!
Fortranは大文字と小文字を区別しないので、最初のプログラムは次のようにこともできます。
Program Hello
    Print *, "Hello World!"
End Program 
このプログラムでは、大文字小文字を区別されるのは、print文の引用符で囲まれた部分("Hello World!")だけです。
{{コラム|オンラインのコンパイル・実行環境|
[https://www.onlinegdb.com/online_fortran_compiler OnlineGDB] の様な、オンラインのコンパイル・実行環境であればウェブブラウザーだけで、Fortranのプログラムをコンパイル・実行できます。
上の例の、[https://onlinegdb.com/0d69HDBoV5 コンパイル・実行例] のようなリンク先を開くと、ウェブブラウザー上でコンパイル・実行することが出来ます。
上のコラムで紹介した「オンラインのコンパイル・実行環境」には、次のような特性があります。
長所
ネットワーク環境とウェブブラウザーさえあればコンパイル・実行できる。
コードの共有を URL を介してできる。
短所
エディターなどの、使い慣れた開発ツールが使えない。
標準入力を使うプログラムの実行に向かない。
短所か問題になる場合は、自らコンパイル実行環境を構築することで解決する必要があります。
g95, flang などいくつかのオープン・ソース・ソフトウェアの Fortran 言語処理系がありますが、ここでは GNUプロジェクトのGCC(GNU Compiler Collection)のFortranフロントエンド gfortran を紹介します。
[https://www.onlinegdb.com/online_fortran_compiler OnlineGDB] でも、gfortran-11.3.0 が使われています。
[https://onlinegdb.com/dxd5WctpA gfortran -v]:
Program Hello
    call system("gfortran -v")
End Program 
実行結果:
Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.3.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-xKiWfi/gcc-11-11.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-xKiWfi/gcc-11-11.3.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.3.0 (Ubuntu 11.3.0-1ubuntu1~22.04) 
ディストリビューションにより、パッケージマネージャとパッケージ体系に違いがありますが、
root@penguin:~# uname -a
Linux penguin 6.1.60-08594-g03a802b9a072 #1 SMP PREEMPT_DYNAMIC Fri Jan 12 18:20:08 PST 2024 x86_64 GNU/Linux
root@penguin:~# apt-get install gfortran-14
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  gfortran-14-x86-64-linux-gnu libgfortran-14-dev libgfortran5
Suggested packages:
  gfortran-14-multilib gfortran-14-doc libcoarrays-dev
The following NEW packages will be installed:
  gfortran-14 gfortran-14-x86-64-linux-gnu libgfortran-14-dev libgfortran5
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 93.1 MB of archives.
After this operation, 366 MB of additional disk space will be used.
Do you want to continue? [Y/n] 
Get:1 https://deb.debian.org/debian trixie/main amd64 libgfortran5 amd64 14-20240201-3 [836 kB]
Get:2 https://deb.debian.org/debian trixie/main amd64 libgfortran-14-dev amd64 14-20240201-3 [880 kB]
Get:3 https://deb.debian.org/debian trixie/main amd64 gfortran-14-x86-64-linux-gnu amd64 14-20240201-3 [91.3 MB]
Get:4 https://deb.debian.org/debian trixie/main amd64 gfortran-14 amd64 14-20240201-3 [2,688 B]                                                                                                
Fetched 93.1 MB in 15s (6,007 kB/s)                                                                                                                                                            
Selecting previously unselected package libgfortran5:amd64.
(Reading database ... 78087 files and directories currently installed.)
Preparing to unpack .../libgfortran5_14-20240201-3_amd64.deb ...
Unpacking libgfortran5:amd64 (14-20240201-3) ...
Selecting previously unselected package libgfortran-14-dev:amd64.
Preparing to unpack .../libgfortran-14-dev_14-20240201-3_amd64.deb ...
Unpacking libgfortran-14-dev:amd64 (14-20240201-3) ...
Selecting previously unselected package gfortran-14-x86-64-linux-gnu.
Preparing to unpack .../gfortran-14-x86-64-linux-gnu_14-20240201-3_amd64.deb ...
Unpacking gfortran-14-x86-64-linux-gnu (14-20240201-3) ...
Selecting previously unselected package gfortran-14.
Preparing to unpack .../gfortran-14_14-20240201-3_amd64.deb ...
Unpacking gfortran-14 (14-20240201-3) ...
Setting up libgfortran5:amd64 (14-20240201-3) ...
Setting up libgfortran-14-dev:amd64 (14-20240201-3) ...
Setting up gfortran-14-x86-64-linux-gnu (14-20240201-3) ...
Setting up gfortran-14 (14-20240201-3) ...
Processing triggers for libc-bin (2.37-15~deb13u1) ...
root@penguin:~# gfortran-14 -v
Using built-in specs.
COLLECT_GCC=gfortran-14
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/14/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 14-20240201-3' --with-bugurl=file:///usr/share/doc/gcc-14/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2,rust --prefix=/usr --with-gcc-major-version-only --program-suffix=-14 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/reproducible-path/gcc-14-14-20240201/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/reproducible-path/gcc-14-14-20240201/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=yes,extra,rtl --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 14.0.1 20240131 (experimental) [master r14-8680-g2f14c0dbb78] (Debian 14-20240201-3) 
$ sudo dnf install gfortran
いく通りかの方法がありますが、[https://www.msys2.org/ MSYS2]環境にMinGW64の一部として、gfortran をインストールする方法を紹介します。
MSYS2/MinGW64のパッケージマネージャは、Arch Linux 由来の pacman(1) です。
MINGW64:
user@host MINGW64 ~
$ pacman -Syuu
 mingw32 is up to date
 mingw64 is up to date
 ucrt64 is up to date
 clang64 is up to date
 msys is up to date
user@host MINGW64 ~
$ pacman -S base-devel mingw-w64-x86_64-toolchain
 プロンプトに MINGW64 があることを確認してください
 まず、パッケージシステムを最新にします（いくつか質問があるかもしれません）。
  base-devel と mingw-w64-x86_64-toolchain をインストールします。
[https://packages.msys2.org/group/base-devel base-devel]
[https://packages.msys2.org/group/mingw-w64-x86_64-toolchain mingw-w64-x86_64-toolchain]
{{コラム|MinGW・MSYSの関係|
MinGW
MinGW-w64
MinGW のフォーク。
64bit/32bit両対応。
ucrtにも対応強化中。
clang64にも対応強化中。
MSYS
MinGW 上のPOSIX環境。
POSIX環境は、Cygwin のフォーク。
MSYS2
MinGW-w64 上のPOSIX環境。
POSIX環境は、Cygwin のフォーク。
今回はMSYS2をインストールして、 pacman を使ってツールチェーンを用意しました。
それぞれのソフトウェア群の開発用状況は日々変わりますので、現在（2021年8月）の状況と最新の状況は異なるかもしれません。
環境が構築できたら、コンパイラーのバージョンを確認します。
コンパイラーのバージョンの確認:
$ gfortran -v
実行結果:
user@hostname MINGW64 ~
Using built-in specs.
COLLECT_GCC=C:\msys64\mingw64\bin\gfortran.exe
COLLECT_LTO_WRAPPER=C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../gcc-10.3.0/configure --prefix=/mingw64 --with-local-prefix=/mingw64/local --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --with-native-system-header-dir=/mingw64/x86_64-w64-mingw32/include --libexecdir=/mingw64/lib --enable-bootstrap --enable-checking=release --with-arch=x86-64 --with-tune=generic --enable-languages=c,lto,c++,fortran,ada,objc,obj-c++,jit --enable-shared --enable-static --enable-libatomic --enable-threads=posix --enable-graphite --enable-fully-dynamic-string --enable-libstdcxx-filesystem-ts=yes --enable-libstdcxx-time=yes --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-lto --enable-libgomp --disable-multilib --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-libiconv --with-system-zlib --with-gmp=/mingw64 --with-mpfr=/mingw64 --with-mpc=/mingw64 --with-isl=/mingw64 --with-pkgversion='Rev5, Built by MSYS2 project' --with-bugurl=https://github.com/msys2/MINGW-packages/issues --with-gnu-as --with-gnu-ld --with-boot-ldflags='-pipe -Wl,--dynamicbase,--high-entropy-va,--nxcompat,--default-image-base-high -Wl,--disable-dynamicbase -static-libstdc++ -static-libgcc' 'LDFLAGS_FOR_TARGET=-pipe -Wl,--dynamicbase,--high-entropy-va,--nxcompat,--default-image-base-high' --enable-linker-plugin-flags='LDFLAGS=-static-libstdc++\ -static-libgcc\ -pipe\ -Wl,--dynamicbase,--high-entropy-va,--nxcompat,--default-image-base-high\ -Wl,--stack,12582912'
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.3.0 (Rev5, Built by MSYS2 project)
user@hostname MINGW64 ~
$
上の例は、Windows 11 上の MSYS2 / MinGW64 上の、gfortran-10.3.0です。環境によって gfortran のコマンド名に prefix や suffix か付く場合があります。
例えば、FreeBSDでは複数のバージョンのGCCパッケージが共存できるようバージョンごとにsuffixが付き gfortran12 の様なコマンド名になります。
テキストエディタなどで hello.f90 を用意し、
hello.f90:
Program Hello
    Print *, "Hello World!"
End Program
コマンドラインから、
gfortran hello.f90 -o hello
とすると、ソースコード hello.f90 から 実行形式 hello をコンパイルします（WinowsやOpenVMSでは、 .EXE の様な拡張子が暗黙に追加されるかもしれません）
gfortran ではデフォルトでFORTRAN 77規格を使用します（FORTRAN 77標準で使用されている固定形式のフォーマットが要求される）。
このため、自由形式のフォーマットを有効にするには、ソースファイルの拡張子を .f90(またはそれ以降の規格)のにして、コンパイラが希望する規格を自動的に推測できるようにしなければなりません。ほかにも、コマンドラインから -ffree-form オプションをコンパイラに渡すことでソースファイルの拡張子が .fでも自由形式のフォーマットを有効にすることができます。
{{コラム|インデント|
（フリーフォーム記法の）Fortranの文法上はインデント（字下げ）は不要です。つまり
program hello
print *,"Hello World!"
end program 
のように記述しても実行可能です。しかし、インデントをしない書き方は、可読性が下がるので、あまり推奨できません。