There has been a discussion going on elsewhere about using protocol buffers for bitcoin. To summarise the advantages:
-> Small encoding -> Very fast -> Implementations in loads of languages (So writing new clients become a lot simpler) -> Forwards compatible (indeed, this is most of the point of protocol buffers) -> Extremely simpleto use in code
So initially I would suggest storing the wallet file using protocol buffers, this isn’t a breaking change and immediately makes the wallet file easier for other programs to parse. Eventually I would hope that bitcoin could use protocol buffers for networking.
Some people have been suggesting that protocol buffers might be larger than the custom written packet layout. I suspect that actually it would be smaller due to some of the clever encoding used in protocol buffers. To resolve this, I think a test is in order, I shall encode a wallet file/network packet using protocol buffers and compare the size the packets in the current scheme. However, I have no idea what’s in a packet, what data is stored in a packet, and in what format?