Continuato software

This commit is contained in:
giomba 2018-02-15 16:21:29 +01:00
parent e2f39a109b
commit b7d89df7cb
1 changed files with 89 additions and 34 deletions

View File

@ -1,11 +1,14 @@
\chapter{Software}
Nella lingua inglese software nasce per imitazione del termine ``hardware" e dalla composizione delle parole ``soft" (in italiano ``morbido", ``tenero", ``leggero") e ``ware" (in italiano ``merci", ``articoli", ``prodotti", ``mercanzie").
%%%
%La paternità della coniazione del termine ``software" non è certa.
%L'americano Paul Niquette la rivendica sostenendo di aver coniato il termine ``software" nel 1953.
%Certa invece è la prima apparizione del termine ``software" in una pubblicazione scritta: un articolo dell'American Mathematical Monthly scritto nel 1958 dallo statistico americano John Wilder Tukey. [da Wikipedia]
\begin{shadequote}
Dagli vita! Dagli vita, capito?! Dai vita alla mia creatura!
\par\emph{Gene Wilder} mentre interpreta il \emph{Dr. Frankenstin}
\end{shadequote}
Nella lingua inglese software nasce per contrapposizione al termine ``hardware" (letteralmente, ``parte dura") e dalla composizione delle parole ``soft" e ``ware'', che in italiano significano, rispettivamente, ``morbido", ``tenero", ``leggero" e ``merci", ``articoli", ``prodotti".
In pratica il termine definisce programmi e procedure utilizzati per far eseguire al computer un determinato compito.
Tutto quello che in un PC non riusciamo a toccare con le mani è considerato Software!
Tutto quello che in un computer non riusciamo a toccare con le mani è considerato software.
Il software viene, a grandi linee, suddiviso in:
\paragraph{Software di base}
@ -13,26 +16,80 @@ Il software viene, a grandi linee, suddiviso in:
Viene generalmente identificato con il sistema operativo.
\paragraph{Software applicativo}
Viene definito software applicativo (o semplicemente ``applicativi") quell'insieme di programmi che l'utente usa per svolgere operazioni quotidiane: per scrivere una email o un documento, ritoccare una foto o navigare su Internet.
Se ne possono individuare 5 categorie:
Viene definito software applicativo (o semplicemente ``applicativi" o ``applicazioni") quell'insieme di programmi che l'utente usa per svolgere operazioni quotidiane: per scrivere una email o un documento, ritoccare una foto o navigare sul web.
Se ne possono individuare alcune categorie:
\begin{itemize}
\item Desktop
\item giochi
\item educazione
\item scienze
\item sw developement
\item business
\item ambienti desktop, o interfacce grafiche: insiemi di applicazioni per consentire agli esseri umani di interagire col computer tramite figure e immagini;
\item accessori: utilità comuni, come calcolatrici, blocchetti per appunti;
\item giochi: applicazioni per lo svago, come giochi di carte e scacchiere;
\item didattica: per l'ambito scolastico e accademico, come planetari e tavole periodiche;
\item grafica: per la gestione di immagini e ritocco delle fotografie;
\item internet: per la navigazione sul web, la posta elettronica e altri servizi della rete;
\item multimediali: per la riproduzione e la realizzazione di musica e filmati;
\item sistema: per l'amministrazione del software di base, come gestione dei file nel filesystem;
\item sviluppo: per la realizzazione di nuove applicazioni;
\item ufficio: per la produzione di documenti, come lettere e amministrazione contabile, molto utili anche in ambito domestico;
\end{itemize}
%% non apprezzo molto questa partenza subito col sw proprietario/libero
\section{Licenze e libertà}
%% inserire qui un intro sul software e la differenza fra sorgente e eseguibile (esempio del biscotto?)
\section{Sviluppo del software}
Il computer può essere utilizzato solamente se questo è composto sia da hardware che da software: infatti, un computer senza software, non è altro che un circuito elettronico e qualche pezzo di ferro, mentre senza hardware, non è altro che un'idea irrealizzabile.
In un certo senso, l'hardware costituisce il braccio, ed esegue il lavoro che gli viene impartito dalla mente, costituita dal software.
La realizzazione di hardware e software è molto complessa, ma, qualunque essere umano utilizzi il computer per la sua ``intelligenza", deve almeno conoscere a grandi linee come viene realizzato il software, per poter indirizzare le proprie scelte in maniera consapevole.
Il software è costituito da una sequenza di comandi e istruzioni che l'hardware deve eseguire; l'hardware conosce solo poche istruzioni, molto elementari, che devono essere codificate con dei numeri.
Se i programmi dovessero essere scritti sottoforma di numeri, realizzare programmi complessi come quelli odierni sarebbe estremamente difficile, per non dire impossibile.
Pertanto, i programmatori hanno inventato dei \emph{linguaggi di programmazione}, con i quali vengono scritti i programmi in una forma detta \emph{sorgente}. Una volta scritti i codici sorgenti, essi vengono tradotti in numeri, la cosiddetta forma \emph{binaria}.
Affinché il programma possa essere effettivamente eseguito, il codice sorgente deve quindi essere tradotto in codice binario.
\begin{figure}
\begin{minipage}{.7\linewidth}
\begin{Verbatim}
int main(int argc, char** argv) {
int risultato = 1, base = 2, esponente = 4;
for (int i = 0; i < esponente; ++i) {
risultato = risultato * base;
}
}
\end{Verbatim}
\end{minipage}
\begin{minipage}{.25\linewidth}
\begin{Verbatim}
55
48 89 e5
c7 45 f0 01 00 00 00
[...]
8b 45 f4
3b 45 fc
7d 10
8b 45 f0
0f af 45 f8
89 45 f0
83 45 f4 01
eb e8
b8 00 00 00 00
5d
c3
\end{Verbatim}
\end{minipage}
\caption{Confronto tra un codice sorgente in linguaggio C e il suo corrispondente codice binario}
\label{fig:confronto-sorgente-binario}
\end{figure}
Una volta ottenuto un binario, è molto difficile (e praticamente impossibile) risalire al sorgente che l'ha generato, mentre ottenere il binario dal sorgente è una questione relativamente veloce. Inoltre, il sorgente è sì scritto in un linguaggio tecnico, ma è comprensibile da un essere umano in poco tempo, mentre il binario no, come ci si può accorgere, anche da profani, dal raffronto in \figurename~\ref{fig:confronto-sorgente-binario}.
Volendo fare un paragone culinario, il codice sorgente è la ``ricetta" che permette di cucinare una torta. Per mangiare, la ricetta deve essere tradotta nella torta, e per poter ottenere la torta, si deve avere la ricetta. Non è possibile risalire alla ricetta dalla torta.
Detto questo, cosa deve fare l'utilizzatore accorto di un computer quando vuole utilizzare un programma? Nonostante che, per poterlo utilizzare, tecnicamente, è sufficiente il binario, in pratica devono essere analizzati anche alcuni aspetti legali che legano indissolubilmente il codice sorgente col codice binario, così come ogni ricetta è legata alla sua torta.
Nasce quindi l'esigenza di comprendere alcune licenze d'uso.
\section{Licenze e libertà}
\subsection{Software proprietario}
In generale il software proprietario è un applicativo di cui la riproduzione, modifica, distribuzione e utilizzo sono vincolate a una richiesta di permesso o categoricamente proibite.
Rispetto ad altri prodotti dell'ingegno, il codice sorgente può essere occultato.
Spesso, quindi, il software proprietario non è reso pubblico proprio per ostacolare chi volesse violare le clausole che lo proteggono e leggi ben precise ne impediscono la ridistribuzione (copyright).
Spesso, quindi, il codice sorgente del software proprietario non è reso pubblico proprio per ostacolare chi volesse violare le clausole che lo proteggono e leggi ben precise ne impediscono lo studio e la ridistribuzione (copyright).
Il software proprietario può essere sia a pagamento che gratuito, in quest'ultimo caso si parla di:
@ -43,29 +100,31 @@ Il software proprietario può essere sia a pagamento che gratuito, in quest'ulti
\end{itemize}
\subsection{Software libero}
Il Software Libero e Open Source\footnote{una breve spiegazione della distinzione può essere messa qui} sono software non sottoposti ad alcun vincolo, lasciando così l'utente libero di farne ciò che desidera, per esempio di:
Il Software Libero e Open Source\footnote{le due terminologie \emph{software~libero} e \emph{open~source}, nella pratica, indicano lo stesso tipo di software, tuttavia esistono delle ragioni filosofiche alla base di questa distinzione, che non sono oggetto di questo manuale} identifica programmi non sottoposti ad alcun vincolo, lasciando così l'utente libero di farne ciò che desidera, per esempio di:
\begin{itemize}
\item eseguirlo per qualsiasi scopo;
\item studiarlo e modificarlo;
\item migliorarne le funzionalità;
\item poterlo liberamente ridistribuire;
\item migliorarne le funzionalità.
\end{itemize}
Molti confondono ``free software" con software ``gratis", poiché “free” in inglese vuol dire sia gratuito che libero, ma quando parliamo di ``free software" intendiamo il software libero.
%% licenze: da accorciare
Il software libero viene sempre distribuito in forma sorgente, e quasi sempre anche in forma binaria. Nel caso in cui la forma binaria non fosse disponibile, rimane comunque sempre possibile ottenerla in autonomia effettuando la traduzione per proprio conto.
Come il software proprietario, anche quello libero può essere a pagamento, oppure gratuito, anche se generalmente si trova in quest'ultima forma.
È necessario porre l'attenzione sul fatto che molti confondono ``free software" con software ``gratis", poiché “free” in inglese vuol dire sia gratuito che libero, ma quando parliamo di ``free software" intendiamo il software libero.
\subsection{Vantaggi del Software Libero}
Utilizzare Software Libero, è prima di tutto una scelta di natura etica.
Il suo sviluppo si basa sugli stessi principi fondanti della comunità scientifica, senza i quali la ricerca non può progredire: il libero scambio delle informazioni, la condivisione di idee e risultati ed il libero utilizzo del patrimonio comune delle conoscenze per un ulteriore sviluppo.
Favorisce dunque l'indipendenza tecnologica, la diffusione del sapere, l'abbassamento delle barriere di accesso alla tecnologia, stimola la concorrenza e dà sostegno all'economia locale.
Le amministrazioni pubbliche sono incoraggiate ad usare Software Libero poiché impiegano le risorse dei cittadini e dovrebbero preferire l'utilizzo e lo sviluppo di un software che resti a disposizione di tutti
%garantendo la sua disponibilità, il suo riutilizzo, e la creazione di competenze, professionalità e valore sul territorio.
Le amministrazioni pubbliche sono incoraggiate dalla legge ad usare Software Libero poiché impiegano le risorse dei cittadini e dovrebbero preferire l'utilizzo e lo sviluppo di un software che resti a disposizione di tutti.
Dal punto di vista tecnico permette la verificabilità del software: diventa possibile, quando serve, monitorare il comportamento effettivo dei programmi intervenendo direttamente sui problemi; inoltre, consente un'estrema facilità di sviluppo, dal momento che ogni nuova implementazione può basarsi sulle modifiche precedenti.
Il codice sorgente è sottoposto e revisionato da un'ampia comunità che corregge bug e malfunzionamenti, che avviene in tempi sufficientemente rapidi.
Dal punto di vista tecnico permette la verificabilità del software: diventa possibile, quando serve, monitorare il comportamento effettivo dei programmi intervenendo direttamente sui problemi, perché il codice sorgente è disponibile; inoltre, consente un'estrema facilità di sviluppo, dal momento che ogni nuova implementazione può basarsi sulle modifiche precedenti.
Il codice sorgente è sottoposto e revisionato da un incalcolabile numero di programmatori, che correggono bug e malfunzionamenti in tempi rapidissimi.
Poiché il codice è sotto gli occhi del mondo, diventa difficile programmare applicativi malevoli.
Inoltre, chiunque abbia basi di programmazione può contribuire: o direttamente scrivendo del codice, ma anche traducendo programmi o segnalando problemi da correggere (bug).
Infine, chiunque abbia basi di programmazione può contribuire direttamente scrivendo del codice, ma anche traducendo programmi o segnalando problemi da correggere (bug).
% questo discorso lo riprenderei da madbob [se un programmatore alle prime armi mette le mani su software pubblico ha modo di mettersi in mostra]
Dal punto di vista sociale utilizzare Software Libero riveste un grande valore culturale dovuto al carattere pubblico e alla condivisione dei risultati; favorisce lo sviluppo professionale: basandosi su una economia dei servizi, incentiva la crescita professionale e l'aumento delle competenze sul territorio.
@ -85,11 +144,7 @@ Parte dello sviluppo del software libero è rappresentato dal lavoro volontario,
\section{GNU/Linux}
% la definizione sua non mi garba... agli occhi della gente mi sembra circolare
GNU/Linux è un sistema operativo creato nel 1991 da Linus Torvalds, uno studente universitario finlandese, integrato con altri software (sia di base che applicativi) GNU .
% cos'è GNU e una sua breve storia la facciamo prima
%sviluppato da Richard Stallman, al tempo studente universitario del MIT (Massachusetts Institute of Technology) di Boston, ha dato vita al sistema operativo GNU/Linux.
%% riprendere a piene mani da quello che si dice a voce nella presentazione introduttiva
Nella prima metà degli anni 80 del XX secolo, Richard~Matthew~Stallman, al tempo ricercatore universitario del MIT (Massachusetts Institute of Technology) di Boston, decise che avrebbe sviluppato un intero sistema operativo libero, che battezzò GNU. Tuttavia, il progetto era molto ambizioso, e si dovette aspettare il 1991 prima che Linus~Torvalds, un brillante studente universitario finlandese, scrivesse la base di un sistema operativo che andava perfettamente a integrarsi con il software GNU, dando così origine a un sistema operativo completo: GNU/Linux.
\subsection{Perché usare Linux}
\begin{itemize}
@ -99,11 +154,11 @@ GNU/Linux è un sistema operativo creato nel 1991 da Linus Torvalds, uno student
\item \textbf{Riuso:} la maggior parte degli utenti navigano in rete, leggono e scrivono email, scrivono file di testo e presentazioni, dunque non hanno bisogno di aggiornare il proprio computer ogni 3/4 anni per avere sempre l'ultimo modello.
Purtroppo i sistemi proprietari evolvono sempre adattandosi al nuovo hardware, aggiungendo effetti grafici o appesantendo il sistema di base, e non è una buona idea utilizzare versioni precedenti perché vengono supportate sempre meno.
Alcune versioni di Linux, invece, sono pensate per l'uso su computer più datati ed eseguire in tranquillità le operazioni di base.
\item
\item
\end{itemize}
\subsection{Le versioni di Linux}
Le diverse versioni di Linux sono dette \textbf{distribuzioni}, ed insieme al sistema operativo raccolgono software applicativi per l'uso base o per guidare l'utente nel processo di installazione del sistema.
Ogni distribuzione si differenzia dall'altra per scelte progettuali, per lo stile grafico, per la ``leggerezza" (alcune sono più adatte a computer performanti, altre a quelli di ultima generazione), per il target di utenti prefissato.
\url{http://www.distrowatch.com}
\url{http://www.distrowatch.com}