stringtranslate.com

Código fuente

Ejemplo de código fuente simple en lenguaje C , un lenguaje de programación procedimental . El programa resultante imprime "hola, mundo" en la pantalla de la computadora. Este primer fragmento conocido de " Hola mundo " del libro fundamental The C Programming Language tiene su origen en Brian Kernighan en los Laboratorios Bell en 1974. [1]

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.

Definiciones

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 realizarle 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.

Organización

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.

Un ejemplo de código fuente Java más complejo . Escrito en estilo de programación orientada a objetos , muestra código repetitivo . Con los comentarios del prólogo indicados en rojo, los comentarios en línea indicados en verde y las declaraciones del programa indicadas en azul.

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.

Propósitos

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.

Aspectos legales

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]

Licencia

Ejemplo de aviso de derechos de autor: [20]

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 .

Calidad

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 .

Ver también

Referencias

  1. ^ Kernighan, Brian W. "Programación en C: un tutorial" (PDF) . Bell Laboratories, Murray Hill, Nueva Jersey Archivado desde el original (PDF) el 23 de febrero de 2015.
  2. ^ "La Licencia Pública General GNU v3.0". Proyecto GNU . Fundación de Software Libre. 29 de junio de 2007. Archivado desde el original el 15 de enero de 2024.
  3. ^ "Definición de código fuente". El proyecto de información de Linux . 14 de febrero de 2006 [23 de mayo de 2004]. Archivado desde el original el 3 de octubre de 2017.
  4. ^ "¿Qué es el software libre?". GNU . Archivado desde el original el 3 de julio de 2017 . Consultado el 12 de diciembre de 2015 .
  5. ^ Stallman, Richard (15 de noviembre de 2017). "La trampa de JavaScript". Proyecto GNU . Consultado el 20 de julio de 2022 .
  6. ^ "Por qué el análisis y la manipulación del código fuente siempre serán importantes" por Mark Harman , décima conferencia de trabajo internacional del IEEE sobre análisis y manipulación del código fuente (SCAM 2010). Timișoara , Rumania , 12 y 13 de septiembre de 2010.
  7. ^ "Conferencia de trabajo ESTAFA". Archivado el 29 de septiembre de 2017 en Wayback Machine .
  8. ^ Martin Goetz (8 de febrero de 1988). "Solo código objeto: ¿IBM está jugando limpio?". Mundo de la informática . vol. 22, núm. 6. pág. 59. 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.
  9. ^ "Ampliación e incorporación del intérprete de Python". Documentación de Python . Archivado desde el original el 3 de octubre de 2012 . Consultado el 17 de agosto de 2014 .
  10. ^ Rouse, Margaret (12 de agosto de 2020). "Método del intérprete". Techinfo . Consultado el 4 de agosto de 2022 .
  11. ^ abc Spinellis, D: Lectura de código: la perspectiva del código abierto . Addison-Wesley Profesional, 2003. ISBN 0-201-79940-5 
  12. " Arte y programación informática " ONLamp.com Archivado el 20 de febrero de 2018 en Wayback Machine , (2005)
  13. ^ "Portabilidad de software: CodeProject". www.codeproject.com . Consultado el 4 de agosto de 2022 .
  14. ^ Liu, José P.; Dogan, Stacey L. (2005). "Ley de derechos de autor y especificidad de la materia: el caso del software informático". Encuesta anual sobre derecho estadounidense de la Universidad de Nueva York . 61 (2). Archivado desde el original el 25 de junio de 2021.
  15. ^ Apple Computer, Inc. contra Franklin Computer Corporation devuelve el byte a la protección de derechos de autor para programas informáticos Archivado el 7 de mayo de 2017 en Wayback Machine en Golden Gate University Law Review Volumen 14, Número 2, Artículo 3 por Jan L. Nussbaum (enero 1984)
  16. ^ ab Lemley, Menell, Merges y Samuelson. Derecho del software y de Internet , pág. 34.
  17. ^ "Información" (PDF) . cr.yp.to. Archivado (PDF) desde el original el 7 de junio de 2011 . Consultado el 27 de diciembre de 2019 .
  18. ^ Bernstein contra el Departamento de Justicia de EE. UU. Archivado el 4 de abril de 2018 en Wayback Machine en eff.org
  19. ^ EFF a los 25: Recordando el caso que estableció el código como discurso Archivado el 5 de enero de 2018 en Wayback Machine en EFF.org por Alison Dame-Boyle (16 de abril de 2015)
  20. ^ "Licencia". www.apache.org. Archivado desde el original el 23 de septiembre de 2015 . Consultado el 27 de diciembre de 2019 .
  21. ^ Hancock, Terry (29 de agosto de 2008). "¿Qué pasaría si los derechos de autor no se aplicaran a los ejecutables binarios?". Revista de Software Libre . Archivado desde el original el 25 de enero de 2016 . Consultado el 25 de enero de 2016 .

Fuentes

enlaces externos