Código fuente

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

En informática, el código fuente, o simplemente código, es cualquier colección de código, con o sin comentarios, escrito utilizando un lenguaje de programación legible por humanos, generalmente como texto sin formato. El código fuente de un programa está especialmente diseñado para facilitar el trabajo de los programadores de computadoras, quienes especifican las acciones que debe realizar una computadora principalmente escribiendo el código fuente.

El código fuente a menudo es transformado por un ensamblador o compilador en un código de máquina binario que puede ser ejecutado por la computadora. El código máquina está entonces disponible para su ejecución en un momento posterior.

La mayor parte del software de aplicación se distribuye en una forma que incluye solo archivos ejecutables. Si se incluyera el código fuente, sería útil para un usuario, programador o administrador del sistema, cualquiera de los cuales podría desear estudiar o modificar el programa.

Alternativamente, según la tecnología que se utilice, el código fuente puede interpretarse y ejecutarse directamente.

Definiciones

La definición de Richard Stallman, formulada en su licencia original de 1989, proponía el 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 hacerle modificaciones.

Algunas fuentes clásicas definen el código fuente como la forma de texto 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, tecleado en una computadora) por un ser humano en texto sin formato (es decir, caracteres alfanuméricos legibles por humanos).

Esto responde al hecho de 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 máquina era código destino. Sin embargo, a medida que las canalizaciones de programación comenzaron a incorporar formas más 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.

Por lo tanto, la definición de Stallman contempla la ambivalencia fuente-objetivo de JavaScript y HTML, así como también contempla posibles formas futuras de producción de software, como lenguajes de programación visual o conjuntos de datos en Machine Learning.

Sin embargo, otras interpretaciones más amplias 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.

En aras de la claridad, se entiende por "código fuente" cualquier descripción completamente ejecutable de un sistema de software. Por lo tanto, se interpreta que incluye código de máquina, lenguajes de muy alto nivel y representaciones gráficas ejecutables de sistemas.

Este enfoque permite un enfoque mucho más flexible para el análisis del sistema, prescindiendo del requisito de que el diseñador colabore mediante la publicación de un formulario conveniente para la comprensión y la 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 persona a máquina.

Historia

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 distinguía 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 cargo adicional. En ese momento, el costo 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.

La mayoría de las primeras revistas informáticas publicaban el código fuente como programas de escritura.

Ocasionalmente, el código fuente completo de un programa grande se publica como un libro de tapa dura, como Computers and Typesetting, vol. B: TeX, The Program de Donald Knuth, PGP Source Code and Internals de Philip Zimmermann, PC SpeedScript de Randy Thompson y µC/OS, The Real-Time Kernel de Jean Labrosse.

Organización

El código fuente que constituye un programa generalmente se encuentra en uno o más archivos de texto almacenados en el disco duro de una computadora; por lo general, estos archivos se organizan cuidadosamente en un árbol de directorios, conocido como árbol de origen. El código fuente también se puede almacenar en una base de datos (como es común en los procedimientos almacenados) o en otro lugar.

El código fuente de una determinada pieza de software puede estar contenido en un solo archivo o en muchos archivos. Aunque la práctica es poco común, el código fuente de un programa se puede escribir en diferentes lenguajes de programación. Por ejemplo, un programa escrito principalmente en el lenguaje de programación C, puede tener partes escritas en lenguaje ensamblador con fines de optimización. También es posible que algunos componentes de una pieza de software se escriban y compilen por separado, en un lenguaje de programación arbitrario, y luego se integren en el software utilizando una técnica llamada enlace de biblioteca. En algunos lenguajes, como Java, esto se puede hacer en tiempo de ejecución (cada clase se compila en un archivo separado que está vinculado por el intérprete en tiempo de ejecución).

Otro método más es hacer que el programa principal sea un intérprete para un lenguaje de programación, ya sea diseñado específicamente para la aplicación en cuestión o de uso general y luego escribir la mayor parte de la funcionalidad real del usuario como macros u otras formas de complementos en este lenguaje., un enfoque tomado por ejemplo por el editor de texto GNU Emacs.

El código base de un proyecto de programación informática es la colección más grande de todo el código fuente de todos los programas informáticos que componen el proyecto. Se ha convertido en una práctica común mantener bases de código en los sistemas de control de versiones. El software moderadamente complejo normalmente requiere la compilación o ensamblaje de varios, a veces docenas o incluso cientos, de diferentes archivos de código fuente. En estos casos, las instrucciones para compilaciones, como Makefile, se incluyen con el código fuente. Estos describen las relaciones de programación entre los archivos de código fuente y contienen información sobre cómo deben compilarse.

Propósitos

El código fuente se usa principalmente como entrada al proceso que produce un programa ejecutable (es decir, se compila o interpreta). También se utiliza como método de comunicación de algoritmos entre personas (p. ej., fragmentos de código en libros).

Los programadores informáticos a menudo encuentran útil revisar el código fuente existente para aprender sobre técnicas de programación. 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. Algunas personas consideran el código fuente como un medio artístico expresivo.

La migración de software a otras plataformas informáticas suele ser prohibitivamente difícil sin el código fuente. Sin el código fuente de una pieza de software en particular, la portabilidad es generalmente costosa desde el punto de vista computacional. Las posibles opciones de portabilidad incluyen traducción binaria y emulación de la plataforma original.

La descompilación de un programa ejecutable se puede utilizar para generar código fuente, ya sea en código ensamblador o en un lenguaje de alto nivel.

Los programadores adaptan con frecuencia el código fuente de una pieza de software para usarlo en otros proyectos, un concepto conocido como reutilización de software.

Aspectos legales

La situación varía en todo el mundo, pero en los Estados Unidos antes de 1974, el software y su código fuente no tenían derechos de autor y, por lo tanto, siempre eran software de dominio público.

En 1974, la Comisión de los Estados Unidos sobre Nuevos Usos Tecnológicos de Obras con Derechos de Autor (CONTU) decidió que "los programas de computadora, en la medida en que incorporen la creación original de un autor, son materia adecuada de derechos de autor".

En 1983, en el caso judicial de los Estados Unidos Apple v. Franklin, se dictaminó que lo mismo se aplicaba al código objeto; y que la Ley de derechos de autor otorgó a los programas informáticos el estatus de derechos de autor de las obras literarias.

En 1999, en el caso de la corte de los Estados Unidos, Bernstein v. United States, se dictaminó además que el código fuente podrí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.

Licencia

Ejemplo de aviso de copyright:

Derechos de autor [yyyy] [nombre del propietario de los derechos de autor]

Con licencia de Apache License, Versión 2.0 (la "Licencia"); no puede usar este archivo excepto de conformidad con la Licencia. Puede obtener una copia de la Licencia enhttp://www.apache.org/licenses/LICENSE-2.0

A menos que lo requiera 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 sea expresa o implícita. Consulte la Licencia para conocer el idioma específico que rige los permisos y las limitaciones en virtud de la Licencia.

Un autor de un trabajo no trivial como el software, tiene varios derechos exclusivos, entre ellos el copyright del código fuente y el código objeto. 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 se pueden asociar con varios paradigmas de licencia; la distinción más importante es el software libre frente al 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, entonces está implícito el valor predeterminado de Todos los derechos reservados.

En términos generales, un software es software libre si sus usuarios son libres de usarlo 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 mientras el código fuente se mantiene en secreto, o si es de propiedad privada y está restringido. Una de las primeras licencias de software que se publicó y que otorgó explícitamente estas libertades fue la Licencia Pública General GNU en 1989; la licencia BSD es otro ejemplo temprano de 1990.

Para el software propietario, las disposiciones de las diversas leyes de derechos de autor, el secreto comercial y las patentes se utilizan para mantener cerrado el código fuente. Además, muchas piezas de software minorista vienen con un acuerdo de licencia de usuario final (EULA) que generalmente prohíbe la descompilación, la ingeniería inversa, el análisis, la modificación o la elusión de la protección contra copias. Los tipos de protección del código fuente, más allá de la compilación tradicional al código objeto, incluyen el cifrado del código, la ofuscación del código o la transformación del código.

Calidad

La forma en que se escribe un programa puede tener consecuencias importantes para sus mantenedores. 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 la 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.

Contenido relacionado

Verilog

Semántica denotacional

Métodos de entrada chinos para computadoras

Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save