I've created a new GPG key to sign a software package in a source repository with an expiration date three years from now. It seemed like a good security measure because if the key is compromised or stolen the damage will be limited.
But then I thought about the day when I will need to sign my new key. Signing the new key with the old key seems equivalent to keeping the old key, and thus adds nothing to security.
Does setting an expiration date improve key security? If so, what's the best expiration/key replacement policy?