PaX
2000年10月 - PAGEEXEC の基本部が PaX として初めてリリースされる。
2000年11月 - MPROTECT の最初のリリース
2001年6月 - ASLR(mmap のランダム化)が実装された。リリースはされていない。
2001年7月 - ASLR リリース
2001年8月 - ASLR にスタックと PIE のランダム化を付加したものがリリース
2002年7月 - VMAミラーリングとRANDEXECリリース
2002年10月 - SEGMEXECリリース、ASLR にカーネルスタックのランダム化を付加したものがリリース
2003年2月 - EI_PAX ELF マーキング導入
2003年4月 - KERNEXEC リリース
2003年7月 - ASLR に brk ランダム化を付加したものがリリース
2004年2月 - PT_PAX_FLAGS_ELF マーキング導入
2004年5月 - PAGEEXEC をコードセグメントに限定することで性能強化
2005年3月 - VMAミラーリングの脆弱性が報告され、新たな PaX と grsecurity がリリースされた。それ以前の SEGMEXEC と RANDEXEC を使ったバージョンは脆弱性があるとされた。
2005年4月 - 脆弱性問題から、PaX を新たな開発者に引き継ぐことが予定されていたが、立候補者が現れず、従来の開発者らが保守を続けている。
これにより、書き込み可能だったことのある領域に存在するコードは実行不能となり、悪意があるかどうかとは関係なく、コードを後から注入することが不可能となる。
すると、Javaのジャストインタイムコンパイル方式のように、実行時にコードを生成して実行する必要のあるアプリケーションは動作できなくなる。しかし多くの場合、そのような機能を必要としているプログラムは、それに依存しないように書き換えることが可能である。根本的に実行時のコード生成が必要なものについては、システムアドミニストレータがその実行ファイルに印を付け、その実行ファイルについては制限が課せられないようにすることができる。
PaX チームは mmap() システムコールをどう扱うかを決定する必要に迫られた。mmap は共有メモリのマッピングや共有ライブラリのロードに使われる。そのため、使われている状況によっては書き込み可能なページや実行可能なページを生成できるようにしなければならない。PaX の現在の実装では、デフォルトで書き込み可能な無名メモリページのマッピングが可能となっている。ファイルのマッピングは mmap() コールが書き込みのパーミッションを指定している場合のみ書き込み可能にできる。mmap() は書き込みと実行が同時に可能なマッピングを生成しない。これは引数で明示的に指示されている場合でもエラーとなる。