Up to you whether you want to limit your answer to software that is possible/realistic