De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

Ejemplo simple de código fuente 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 seminal The C Programming Language tiene su origen en Brian Kernighan en los Laboratorios Bell en 1974. [1]

En informática , el código fuente es cualquier colección de código, con o sin comentarios , escrito usando [1] un lenguaje de programación legible por humanos , generalmente como texto plano . 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 código de máquina binario que puede ser ejecutado por la computadora. El código de la máquina podría almacenarse para su ejecución. en otro momento. Alternativamente, el código fuente puede interpretarse y, por tanto, ejecutarse inmediatamente.

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.

Definiciones [ editar ]

El Proyecto de información de Linux define el código fuente como: [2]

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, en una computadora) por un humano en texto plano (es decir, caracteres alfanuméricos legibles por humanos).

La noción de código fuente también puede tomarse de manera más amplia, para incluir código de máquina y notaciones en lenguajes gráficos, ninguno de los cuales es de naturaleza textual. Un ejemplo de un artículo presentado en la conferencia anual IEEE y sobre análisis y manipulación de código fuente: [3]

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 considera que incluye código de máquina, lenguajes de muy alto nivel y representaciones gráficas ejecutables de sistemas. [4]

A menudo, hay varios pasos de traducción o minificación de programas entre el código fuente original escrito por un humano y un programa ejecutable. Mientras que algunos, como la FSF , argumentan que un archivo intermedio "no es un código fuente real y no cuenta como código fuente", [5] otros encuentran conveniente referirse a cada archivo intermedio como el código fuente para los siguientes pasos.

Historia [ editar ]

Los primeros programas para computadoras con programas almacenados se ingresaron 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. [6]

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

Ocasionalmente, todo el código fuente de un programa grande se publica como un libro de tapa dura, como Computers and Typesetting , vol. B: TeX, el programa de Donald Knuth , código fuente e internos de PGP de Philip Zimmermann , PC SpeedScript de Randy Thompson y µC / OS, el núcleo en tiempo real de Jean Labrosse.

Organización [ editar ]

El código fuente que constituye un programa generalmente se guarda 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 fuentes . El código fuente también se puede almacenar en una base de datos (como es común para 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 , demuestra 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 software en particular 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. [7] 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 mediante una técnica llamada vinculación de bibliotecas . 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 convertir el programa principal en un intérprete de un lenguaje de programación, [ cita requerida ] ya sea diseñado específicamente para la aplicación en cuestión o de propósito general, y luego escribir la mayor parte de la funcionalidad del usuario real como macros u otras formas de agregar -ins en este lenguaje, un enfoque adoptado, por ejemplo, por el editor de texto GNU Emacs .

El código base de un proyecto de programación de computadoras es la colección más grande de todo el código fuente de todos los programas de computadora 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 quizás incluso cientos, de diferentes archivos de código fuente. En estos casos, las instrucciones para compilaciones, como un 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 se compilarán.

Propósitos [ editar ]

El código fuente se utiliza 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 (por ejemplo, fragmentos de código en libros). [8]

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

Portar 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 computacionalmente costosa. [ cita requerida ] Las posibles opciones de migración 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 con frecuencia adaptan el código fuente de una pieza de software para usar en otros proyectos, un concepto conocido como reutilización de software .

Aspectos legales [ editar ]

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 . [10]

En 1974, la Comisión de Estados Unidos sobre Nuevos Usos Tecnológicos de Obras Protegidas por 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 apropiada de derechos de autor". [11] [12]

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 de computadora el estatus de derecho de autor de obras literarias.

En 1999, en el caso judicial de Estados Unidos Bernstein v. 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 idioma y puede usarse para compartir humor y otras actividades artísticas, es una forma de comunicación protegida. [13] [14] [15]

Licencias [ editar ]

Ejemplo de aviso de derechos de autor: [16]

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

Con licencia de Apache License, 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 sea expresa o implícita. Consulte la Licencia para conocer el idioma específico que rige los permisos y las limitaciones de la Licencia.

Un autor de un trabajo no trivial como el software, [12] tiene varios derechos exclusivos , entre ellos el copyright del código fuente y el código objeto . [17] 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 licencias; 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 el valor predeterminado de Todos los derechos reservados. está implícito.

En términos generales, el 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.

En el caso del 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 para el 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 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 de código , la ofuscación o la transformación del código .

Calidad [ editar ]

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 lenguaje, tienen como objetivo el mantenimiento del código fuente del software, lo que implica depurar y actualizar . 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 [ editar ]

  • Bytecode
  • Codificar como datos
  • Convenciones de codificación
  • Codigo de computadora
  • Software libre
  • Código heredado
  • Codigo de maquina
  • Lenguaje de marcado
  • Código ofuscado
  • Código de objeto
  • Paquete (sistema de gestión de paquetes)
  • Lenguaje de programación
  • Repositorio de código fuente
  • Resaltado de sintaxis
  • Lenguaje de programación visual

Referencias [ editar ]

  1. ^ a b "Programación en C: un tutorial" (PDF) . Archivado desde el original (PDF) el 23 de febrero de 2015.
  2. ^ El proyecto de información de Linux. "Definición de código fuente" Archivado el 3 de octubre de 2017 en Wayback Machine .
  3. ^ Conferencia de trabajo de SCAM Archivada el 29 de septiembre de 2017 en Wayback Machine , 2001-2010.
  4. ^ 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 de IEEE sobre análisis y manipulación del código fuente (SCAM 2010). Timișoara , Rumania , 12 a 13 de septiembre de 2010.
  5. ^ "gnu.org" . www.gnu.org . Archivado desde el original el 3 de julio de 2017 . Consultado el 12 de diciembre de 2015 .
  6. ^ Martin Goetz (8 de febrero de 1988). "Sólo código de objeto: ¿IBM juega limpio?" . Computerworld . Vol. 22 no. 6. p. 59. Fue en 1983 cuando IBM invirtió su política de 20 años de distribuir código fuente con sus licencias de productos de software.
  7. ^ "Ampliación e incrustación del intérprete de Python" . docs.python.org . Archivado desde el original el 3 de octubre de 2012 . Consultado el 17 de agosto de 2014 .
  8. ^ a b c Spinellis, D: Lectura de código: la perspectiva del código abierto . Addison-Wesley Professional, 2003. ISBN 0-201-79940-5 
  9. ^ " Arte y programación informática " ONLamp.com Archivado el 20 de febrero de 2018 en Wayback Machine , (2005)
  10. ^ P., Liu, Joseph; L., Dogan, Stacey (2005). "Derecho de autor y especificidad de la materia: el caso del software informático" . Encuesta anual de derecho estadounidense de la Universidad de Nueva York . 61 (2).
  11. ^ Apple Computer, Inc. v.Franklin Computer Corporation devuelve el byte a la protección de derechos de autor para programas de computadora 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)
  12. ^ a b Lemley, Menell, Merges y Samuelson. Derecho del software e Internet , pág. 34.
  13. ^ "Información" (PDF) . cr.yp.to. Archivado (PDF) desde el original el 7 de junio de 2011 . Consultado el 27 de diciembre de 2019 .
  14. ^ Bernstein v. Departamento de Justicia de EE. UU. Archivado el 4 de abril de 2018 en Wayback Machine en eff.org
  15. ^ 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)
  16. ^ "Licencia" . www.apache.org. Archivado desde el original el 23 de septiembre de 2015 . Consultado el 27 de diciembre de 2019 .
  17. ^ Hancock, Terry (29 de agosto de 2008). "¿Y 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 [ editar ]

  • (VEW04) "Using a Decompiler for Real-World Source Recovery", M. Van Emmerik y T. Waddington, Conferencia de trabajo sobre ingeniería inversa , Delft , Países Bajos , 9-12 de noviembre de 2004. Versión ampliada del documento .

Enlaces externos [ editar ]

  • Definición de código fuente por The Linux Information Project (LINFO)
  • "Sistema de acreditación obligatorio para productos de seguridad informática" . MetaFilter.com. 22 de septiembre de 2008. introducirá reglas que exijan a las empresas extranjeras revelar información secreta sobre electrodomésticos digitales y otros productos a partir de mayo del próximo año, dijo Yomiuri Shimbun , citando fuentes no identificadas. 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, dijo el diario.
  • Mismo programa escrito en varios idiomas
  • Ofuscador de JavaScript