Fritz - reads and writes
ChessBase (multiple versions on various platforms, including Light/Full, Windows/Mobile, etc) - reads and writes, except for CB LightChess Assistant (Full and Light) - read and writes
ChessX - reads, but writes have some issues
SCID - reads, but does not write
(If you know of another software that supports PGN files - please leave a comment.)
- Each tool exports moves with a slightly different new line format
- Each tool (or even different versions of the same software) updates headers in its own way, putting PGN header tags in a different order. That results in issues such as player names in the game headers cannot read properly by some versions of the same packages.
- Additional formatting, such as arrows, diagrams, highlighted squares, and engine evaluations also follow a different convention. So arrows you draw in Fritz, will likely show up as garbage if you open up the same PGN file in Chess Assistant and vice versa. What's even worse - if you add a diagram for a position in Chess Assistant, hoping to be able to print it from Fritz, you'd be in for a disappointment.
To learn more about this (and to possibly bypass some of these issues) - read my recent post Editing Pgn Files without ChessBase or Other Database Program – Syntax Highlighting or other posts I wrote about PGN.