software definitions