{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Qué te deja hacer una licencia\n",
    "\n",
    "Que sea público no significa que sea tuyo, y viceversa\n",
    "\n",
    "Cuaderno de práctica del capítulo 16 de **Git desde cero**, de Miss Yera.\n",
    "\n",
    "Corre de arriba abajo. Si lo abres en Google Colab no necesitas instalar nada.\n",
    "\n",
    "Capítulo completo: https://missyera.com/guias/git-desde-cero/licencias/\n",
    "\n",
    "Los ejercicios están al final y traen una celda vacía debajo de cada uno. Las\n",
    "respuestas viven en el cuaderno de soluciones, y merece la pena pelearse un\n",
    "rato antes de abrirlo 💛"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Este capítulo lo escribo con una advertencia por delante: no soy abogada y\n",
    "esto no es asesoría legal. Es lo que necesitas saber para no meter la pata con\n",
    "un cliente, que es distinto 👩‍⚖️\n",
    "\n",
    "Y la pata más común es esta: *\"está en GitHub, es público, lo uso\"*."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Público no es libre"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Cuando alguien escribe algo, ese algo es suyo desde el momento en que lo\n",
    "escribe. No hace falta registrar nada. Publicarlo en internet lo hace\n",
    "**visible**, no gratis.\n",
    "\n",
    "Por eso, si un repositorio no tiene licencia, la respuesta por defecto es\n",
    "\"todos los derechos reservados\". Los propios términos de GitHub dicen que\n",
    "subiendo algo público le das a los demás el derecho de verlo y de bifurcarlo\n",
    "dentro de GitHub, y nada más. Ni usarlo en tu trabajo, ni copiarlo dentro de un\n",
    "proyecto que cobras.\n",
    "\n",
    "La licencia es justamente el permiso que el autor da por adelantado, para no\n",
    "tener que contestar correos uno por uno 📜"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Las tres que vas a encontrar"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "| Licencia | Puedo usarlo en algo que cobro | Tengo que abrir mi código | La reconoces por |\n",
    "|---|---|---|---|\n",
    "| MIT | Sí | No | Es cortita, cabe en una pantalla |\n",
    "| Apache 2.0 | Sí | No | Larga, habla de patentes |\n",
    "| GPL v3 | Sí | Sí, si lo distribuyes | Habla de \"copyleft\" |\n",
    "| Sin archivo | No | - | No hay LICENSE en la raíz |"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "MIT y Apache dicen básicamente \"haz lo que quieras, no me demandes si se\n",
    "rompe, y deja mi nombre en el aviso\". GPL dice \"haz lo que quieras, pero si\n",
    "entregas algo construido encima de esto, ese algo también tiene que ser\n",
    "abierto\".\n",
    "\n",
    "Esa última fila es la que importa en el trabajo: si vas a entregarle a un\n",
    "cliente algo que lleva dentro una librería GPL, esa es una conversación que hay\n",
    "que tener antes y no después ⚠️"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Mirar la licencia desde la terminal"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Armamos un proyecto con licencia para verlo:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "mkdir reporte-ventas\n",
    "cd reporte-ventas\n",
    "git init -q\n",
    "printf 'ciudad,monto\\nLima,1200\\nArequipa,890\\n' > ventas.csv\n",
    "printf '# Reporte de ventas\\n' > README.md\n",
    "git add .\n",
    "git commit -q -m \"Primera version del reporte de ventas\"\n",
    "ls\n",
    "test -f LICENSE && echo \"tiene licencia\" || echo \"sin licencia, ojo\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Ese `test -f LICENSE` es la revisión de cinco segundos que hago\n",
    "antes de usar cualquier cosa ajena en un proyecto de cliente 🔎"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Ponerle una a lo tuyo"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "En GitHub hay un asistente (*Add file > Create new file*, escribe\n",
    "`LICENSE` y aparece un botón para elegir). Desde la terminal es un\n",
    "archivo de texto y ya:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "printf 'MIT License\\n\\nCopyright (c) 2026 Gera Flores\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy\\nof this software and associated documentation files (the \"Software\"), to deal\\nin the Software without restriction.\\n' > LICENSE\n",
    "git add LICENSE\n",
    "git commit -q -m \"Se agrega la licencia MIT\"\n",
    "head -3 LICENSE\n",
    "git log --oneline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "El texto completo de MIT son unas veinte líneas y se copia tal cual desde\n",
    "[opensource.org](https://opensource.org/license/mit). Lo único que se cambia es el año y el\n",
    "nombre 📝"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Cuando el archivo se llama de otra forma"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "git mv LICENSE LICENCIA.txt\n",
    "git commit -q -m \"Se traduce el nombre del archivo de licencia\"\n",
    "ls\n",
    "git log --oneline -1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Funciona, pero no lo hagas. GitHub reconoce el archivo por el nombre\n",
    "`LICENSE` y es lo que muestra en la barra lateral del proyecto. Con\n",
    "otro nombre, tu licencia existe y nadie la ve."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "git mv LICENCIA.txt LICENSE\n",
    "git commit -q -m \"Vuelve a llamarse LICENSE, que es lo que GitHub reconoce\"\n",
    "ls"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Qué hacer si el proyecto que quieres no tiene licencia"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Preguntar. Se abre un issue de tres líneas, sin drama:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "```\n",
    "Hola! Me gustaría usar esto en un proyecto de trabajo.\n",
    "¿Podrías agregarle una licencia para saber qué está permitido?\n",
    "Gracias por publicarlo 🙌\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "La mitad de las veces es un olvido y lo resuelven el mismo día. Y si nadie\n",
    "contesta en dos semanas, esa también es una respuesta 🤷‍♀️"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### La trampa\n",
    "\n",
    "Encuentras en GitHub un script que hace exactamente el reporte de ventas que te pidió tu cliente. No tiene licencia, pero es público, así que lo usas.\n",
    "\n",
    "```\n",
    "$ ls\n",
    "README.md  reporte.py  requirements.txt\n",
    "\n",
    "$ ls LICENSE\n",
    "ls: cannot access 'LICENSE': No such file or directory\n",
    "```\n",
    "\n",
    "**¿Qué está mal?** La respuesta está en el cuaderno de soluciones. Míralo tú primero."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Comprueba que se entendió"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Comprueba que lo tienes\n",
    "\n",
    "Encuentras un script público en GitHub, sin archivo LICENSE, que resuelve el reporte que te pidió un cliente. ¿Qué puedes hacer?\n",
    "\n",
    "a) Usarlo, es público\n",
    "\n",
    "b) Mirarlo y aprender de él, pero no usarlo sin preguntar\n",
    "\n",
    "c) Usarlo si lo cambio bastante\n",
    "\n",
    "d) Usarlo si menciono al autor"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Ejercicios"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. Revisa si un proyecto tiene licencia\n",
    "\n",
    "Crea el catálogo de bodegas sin licencia y hazle la\n",
    "revisión de cinco segundos."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# tu turno"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. Ponle MIT\n",
    "\n",
    "Agrega la licencia y guárdala en su propio commit."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# tu turno"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. Comprueba el año y el nombre\n",
    "\n",
    "Lo único que se personaliza de MIT es la línea del\n",
    "copyright."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# tu turno"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. Mira cuándo se agregó\n",
    "\n",
    "La historia de un solo archivo, que ya viste en el\n",
    "capítulo 6."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# tu turno"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5. Prueba a renombrarla\n",
    "\n",
    "Cámbiale el nombre y vuelve a dejarla como estaba."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# tu turno"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6. Busca licencias en todo un proyecto\n",
    "\n",
    "Un proyecto puede traer licencias de terceros dentro.\n",
    "Búscalas todas."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# tu turno"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 7. Intenta borrar una licencia que no existe\n",
    "\n",
    "Pídele a Git que quite un archivo que el proyecto no\n",
    "tiene."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# tu turno"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Lo que te llevas"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Sin LICENSE, todos los derechos reservados. Para lo tuyo, MIT; para\n",
    "lo ajeno, mira el archivo antes de usarlo.**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "Ese era el capítulo 16 de **Git desde cero**. El texto completo, con las salidas de cada bloque, está en https://missyera.com/guias/git-desde-cero/licencias/\n",
    "\n",
    "Que tengas lindo día! 🌸"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
