En informática , código fuente , o simplemente código , es texto (normalmente texto sin formato ) que se ajusta a un lenguaje de programación legible por humanos y especifica el comportamiento de una computadora . Un programador escribe código para producir un programa que se ejecuta en una computadora.
Dado que una computadora, básicamente, solo entiende código de máquina , la fuente debe traducirse para que la computadora pueda utilizarla y esto se puede implementar de diversas maneras dependiendo de la tecnología disponible. El código fuente puede ser convertido mediante un compilador o ensamblador en código de máquina que puede ejecutarse directamente . Alternativamente, el código fuente se puede procesar sin convertirlo a código de máquina a través de un intérprete que realiza las acciones prescritas por el código fuente a través del código de máquina del intérprete. Otra tecnología (es decir, bytecode ) incorpora ambos mecanismos al convertir el código fuente a una forma intermedia que a menudo no es legible por humanos pero tampoco es código de máquina y un intérprete ejecuta la forma intermedia.
La mayoría de los idiomas permiten comentarios . El programador puede agregar comentarios para documentar el código fuente para sí mismo y para otros programadores que lean el código. Los comentarios no se pueden representar en código de máquina y, por lo tanto, los compiladores, intérpretes y similares los ignoran.
A menudo, el código fuente del software de aplicación no se distribuye ni está disponible públicamente porque el productor quiere proteger su propiedad intelectual (PI). Pero, si el código fuente está disponible ( código abierto ), puede ser útil para un usuario , programador o administrador del sistema , cualquiera de los cuales desee estudiar o modificar el programa.
La definición de Richard Stallman , formulada en su fundamental licencia de 1989 , proponía código fuente como cualquier forma en la que se modifica el software:
El "código fuente" de una obra significa la forma preferida de la obra para realizar modificaciones. [2]
Algunas fuentes clásicas definen el código fuente como la forma textual de los lenguajes de programación, por ejemplo:
El código fuente (también conocido como fuente o código) es la versión del software tal como fue escrito originalmente (es decir, escrito en una computadora) por un humano en texto plano (es decir, caracteres alfanuméricos legibles por humanos). [3]
Esto responde a que, cuando apareció por primera vez la traducción de programas , la forma contemporánea de producción de software eran los lenguajes de programación textuales, por lo que el código fuente era código de texto mientras que el código de máquina era código de destino. Sin embargo, a medida que los canales de programación comenzaron a incorporar más formas intermedias, algunas en lenguajes como JavaScript que podían ser fuente o destino, el código de texto dejó de ser sinónimo de código fuente.
La definición de Stallman contempla así la ambivalencia fuente-destino de JavaScript y HTML, además de contemplar posibles formas futuras de producción de software, como lenguajes de programación visual o conjuntos de datos en Machine Learning. [4] [5]
Otras interpretaciones más amplias, sin embargo, consideran que el código fuente incluye el código de máquina junto con todos los lenguajes de alto nivel que lo producen; esta definición deshace la distinción máquina/texto original al considerar cada paso en la traducción del programa como código fuente.
Para mayor claridad, se entiende por "código fuente" cualquier descripción completamente ejecutable de un sistema de software. Por lo tanto, se interpreta de manera que incluye código de máquina, lenguajes de muy alto nivel y representaciones gráficas ejecutables de sistemas. [6] [7]
Este enfoque permite un enfoque mucho más flexible para el análisis del sistema, prescindiendo del requisito de que el diseñador colabore publicando un formulario conveniente para su comprensión y modificación. También se puede aplicar a escenarios donde no se necesita un diseñador, como el ADN. Sin embargo, esta forma de análisis no contempla un análisis de código de máquina a máquina más costoso que el análisis de código de humano a máquina.
Los primeros programas para computadoras con programas almacenados se ingresaban en binario a través de los interruptores del panel frontal de la computadora. Este lenguaje de programación de primera generación no hacía distinción entre código fuente y código máquina .
Cuando IBM ofreció por primera vez software para trabajar con su máquina, el código fuente se proporcionó sin costo adicional. En aquel momento, el coste de desarrollo y soporte del software estaba incluido en el precio del hardware. Durante décadas, IBM distribuyó código fuente con sus licencias de productos de software, hasta 1983. [8]
La mayoría de las primeras revistas de informática publicaban el código fuente como programas de escritura .
Ocasionalmente, el código fuente completo de un programa grande se publica en un libro de tapa dura, como Computers and Typesetting , vol. B: TeX, el programa de Donald Knuth , código fuente e componentes internos de PGP de Philip Zimmermann , PC SpeedScript de Randy Thompson y µC/OS, el kernel en tiempo real de Jean Labrosse.
El código fuente que constituye un programa suele estar en uno o más archivos de texto almacenados en un sistema de archivos de computadora . Se puede organizar una base de código más grande en un árbol de directorios conocido como árbol de fuentes . El código fuente también se puede almacenar en una base de datos , como es habitual en los procedimientos almacenados , o en otro lugar.
El código fuente de un programa se puede escribir en varios lenguajes de programación. [9] Por ejemplo, no es raro que un programa escrito principalmente en C tenga partes escritas en lenguaje ensamblador con fines de optimización.
Algunos idiomas permiten varios idiomas en el mismo archivo. Por ejemplo, un bloque de ensamblaje incrustado en un archivo C.
La vinculación de bibliotecas permite escribir y compilar componentes por separado, a veces en varios idiomas, y luego integrarlos en un programa. Por ejemplo, con Java , las clases se compilan en archivos separados que el intérprete vincula entre sí en tiempo de ejecución . Microsoft Windows admite programas creados a partir de archivos DLL ; cada uno de los cuales puede escribirse en cualquier lenguaje que pueda compilarse en una DLL. De manera similar, Microsoft .NET admite programas creados a partir de ensamblados .NET ; cada uno de los cuales puede escribirse en cualquier lenguaje .NET .
El punto de entrada de un programa puede ser un intérprete. El intérprete podría diseñarse para un lenguaje personalizado y específico de la aplicación o para un lenguaje de propósito general, de modo que el intérprete pueda usarse para múltiples aplicaciones. [10]
Normalmente, el código fuente se almacena en un sistema de control de versiones .
Para producir software ejecutable, una base de código compleja a menudo requiere construir (compilar, ensamblar,...) muchos archivos de código fuente: cientos, miles o más. Las instrucciones de construcción, como un Makefile , a menudo se controlan con el código fuente en el mismo repositorio de control de versiones . Estos archivos de instrucciones de compilación describen las relaciones entre los archivos de código fuente y contienen información sobre cómo deben construirse por separado y luego combinarse.
El código fuente se introduce principalmente en un proceso informático que, en última instancia, da como resultado el control del comportamiento de la computadora. En otras palabras, es entrada a un compilador , intérprete o similar.
También se utiliza para comunicar algoritmos entre personas (por ejemplo, fragmentos de código en línea o en libros). [11]
A los programadores de computadoras les puede resultar útil revisar el código fuente existente para aprender sobre técnicas de programación. [11] El intercambio de código fuente entre desarrolladores se cita con frecuencia como un factor que contribuye a la maduración de sus habilidades de programación. [11] Algunas personas consideran el código fuente un medio artístico expresivo . [12]
Portar software a otra plataforma informática suele ser prohibitivamente difícil y costoso sin el código fuente. Una posible opción de portabilidad sin código fuente es la traducción binaria . Otra es la emulación de la plataforma original, aunque esto suele ser demasiado costoso desde el punto de vista computacional; corre lentamente. [13]
La descompilación es el proceso de convertir código de máquina a una forma más utilizable, a menudo a código ensamblador o código fuente en lenguaje de alto nivel .
La reutilización del software describe la práctica de utilizar software existente en otro sistema de software a través de una biblioteca de software . Algunos pueden considerar la reutilización para incluir la adaptación del código fuente de un software a otro.
La situación varía a nivel mundial, pero en Estados Unidos antes de 1974, el software y su código fuente no estaban protegidos por derechos de autor y, por lo tanto, siempre eran software de dominio público . [14]
En 1974, la Comisión estadounidense sobre nuevos usos tecnológicos de obras protegidas por derechos de autor (CONTU) decidió que "los programas de computadora, en la medida en que incorporan la creación original de un autor, son materia propia de derechos de autor". [15] [16]
En 1983, en el caso judicial de Estados Unidos Apple v. Franklin se dictaminó que lo mismo se aplicaba al código objeto ; y que la Ley de Derecho de Autor concedía a los programas informáticos la categoría de derechos de autor de obras literarias.
En 1999, en el caso judicial estadounidense Bernstein contra Estados Unidos, se dictaminó además que el código fuente podía considerarse una forma de libertad de expresión protegida constitucionalmente . Los defensores de la libertad de expresión argumentaron que debido a que el código fuente transmite información a los programadores, está escrito en un lenguaje y puede usarse para compartir humor y otras actividades artísticas, es una forma protegida de comunicación. [17] [18] [19]
Copyright [yyyy] [nombre del propietario de los derechos de autor]
Licenciado bajo la Licencia Apache, Versión 2.0 (la "Licencia"); no puede utilizar este archivo excepto de conformidad con la Licencia. Puede obtener una copia de la Licencia en
- http://www.apache.org/licenses/LICENSE-2.0
A menos que lo exija la ley aplicable o se acuerde por escrito, el software distribuido bajo la Licencia se distribuye "TAL CUAL", SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas. Consulte la Licencia para conocer el idioma específico que rige los permisos y limitaciones de la Licencia.
Un autor de una obra no trivial como un software, [16] tiene varios derechos exclusivos , entre ellos los derechos de autor del código fuente y del código objeto . [21] El autor tiene el derecho y la posibilidad de otorgar a los clientes y usuarios de su software algunos de sus derechos exclusivos en forma de licencia de software . El software y el código fuente que lo acompaña pueden asociarse con varios paradigmas de concesión de licencias; la distinción más importante es software libre versus software propietario . Esto se hace incluyendo un aviso de derechos de autor que declara los términos de la licencia. Si no se encuentra ningún aviso, se implica el valor predeterminado de Todos los derechos reservados .
En términos generales, un software es software libre si sus usuarios son libres de utilizarlo para cualquier propósito, estudiar y cambiar su código fuente, dar o vender sus copias exactas y dar o vender sus copias modificadas. El software es propietario si se distribuye manteniendo el código fuente en secreto, o si es de propiedad privada y está restringido. Una de las primeras licencias de software que se publicó y que concedió explícitamente estas libertades fue la Licencia Pública General GNU en 1989; la licencia BSD es otro ejemplo temprano de 1990.
En el caso del software propietario, se utilizan las disposiciones de las distintas leyes de derechos de autor, el secreto comercial y las patentes para mantener el código fuente cerrado. Además, muchas piezas de software minorista vienen con un acuerdo de licencia de usuario final (EULA) que normalmente prohíbe la descompilación , la ingeniería inversa , el análisis, la modificación o eludir la protección contra copia . Los tipos de protección del código fuente, más allá de la compilación tradicional en código objeto , incluyen cifrado de código, ofuscación de código o transformación de código .
La forma en que se escribe un programa puede tener consecuencias importantes para quienes lo mantienen. Las convenciones de codificación , que enfatizan la legibilidad y algunas convenciones específicas del idioma, tienen como objetivo el mantenimiento del código fuente del software, lo que implica depuración y actualización . Otras prioridades, como la velocidad de ejecución del programa o la capacidad de compilar el programa para múltiples arquitecturas, a menudo hacen que la legibilidad del código sea una consideración menos importante, ya que la calidad del código generalmente depende de su propósito .
Fue en 1983 cuando IBM revirtió su política de 20 años de distribuir código fuente con sus licencias de productos de software.
introducirá normas que exigirán que las empresas extranjeras revelen información secreta sobre electrodomésticos digitales y otros productos a partir de mayo del próximo año, dijo el Yomiuri Shimbun , citando fuentes anónimas. Si una empresa se niega a revelar información, China le prohibiría exportar el producto al mercado chino o producirlo o venderlo en China, afirmó el periódico.