Le differenze sono per lo più connotative e contestuali.
"Software" può riferirsi all'intero campo, o nella specifica alla parte generale di qualcosa che non è hardware o ad una raccolta di cose che non fanno necessariamente parte dello stesso programma / app. ("Un iPhone è un ottimo hardware, ma non sarebbe niente senza il software").
"Applicazione" è un'unità completa che può essere costituita da più di un modulo in più di una lingua su più di un computer, tutti funzionanti insieme. Potrebbe non farlo, nel qual caso è praticamente la stessa cosa di un "programma".
"Programma" ha la connotazione di essere un'unità discreta, e mentre è usato in modo intercambiabile con "applicazione", sembra scomodo riferirsi a un "programma web" invece di una "web app", o un "client / programma server ", invece di una" app client / server ". "Programma" è spesso usato per riferirsi a un'unità operativa completa vista da uno sviluppatore piuttosto che da una prospettiva utente (sembra antiquato riferirsi, come utente, all'installazione di un "programma" invece di una "app"), e spesso per cose che non sono destinate ad uso pubblico, come un programma di test o un programma di prova del concetto.
"Gadget" (che io intendo significa lo stesso di "widget") di solito significa qualcosa di più piccolo di un'app, (sebbene sia uno), di solito perché ha meno di una gui con tutte le funzionalità, spesso viene eseguito all'interno o collegato a qualcos'altro, o è usato casualmente per fare una sola cosa, come controllare il tempo, piuttosto che con un'interazione prolungata.