Translation components API.

See the Weblate's Web API documentation for detailed description of the API.

GET /api/components/freebsd-doc/articles_linux-emulation/changes/?format=api&page=18
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "count": 891,
    "next": null,
    "previous": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/changes/?format=api&page=17",
    "results": [
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26619/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:56:58.502142Z",
            "action": 5,
            "target": "Por esta razón <function>kern_open</function> y <function>vn_open</function> debe modificarse para incorporar el adicional <varname>dirfd</varname> parámetro. No se crea una capa de compatibilidad para aquellos porque no hay muchos usuarios de esta y los usuarios se pueden convertir fácilmente. Esta implementación general permite a FreeBSD implementar su propio *en llamadas al sistema. Esto se está discutiendo ahora mismo.",
            "id": 93293,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/93293/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26620/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:57:09.622611Z",
            "action": 37,
            "target": "Ioctl",
            "id": 93294,
            "action_name": "Marked for edit",
            "url": "https://translate-dev.freebsd.org/api/changes/93294/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/157270/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:59:16.872263Z",
            "action": 5,
            "target": "La interfaz ioctl es bastante frágil debido a su generalidad. Tenemos que tener en cuenta que los dispositivos difieren entre <trademark class=\"registered\">Linux</trademark> y FreeBSD, por lo que se debe tener cuidado para que la emulación de ioctl funcione correctamente. El manejo de ioctl se implementa en <filename>linux_ioctl.c</filename>, donde <function>linux_ioctl</function> la función está definida. Esta función simplemente itera sobre conjuntos de manejadores ioctl para encontrar un manejador que implemente un comando dado. El syscall ioctl tiene tres parámetros, el descriptor de archivo, el comando y un argumento. El comando es un número de 16 bits, que en teoría se divide en 8 bits altos que determinan la clase del comando ioctl y 8 bits bajos, que son el comando real dentro del conjunto dado. La emulación aprovecha esta división. Implementamos controladores para cada conjunto, como <function>sound_handler</function> o <function>disk_handler</function>.Cada controlador tiene un comando máximo y un comando mínimo definido, que se utiliza para determinar qué controlador se utiliza. Hay leves problemas con este enfoque porque <trademark class=\"registered\">Linux</trademark> no usa la división de conjuntos de manera consistente, por lo que a veces los ioctls de un conjunto diferente están dentro de un conjunto al que no deberían pertenecer (ioctls genéricos SCSI dentro del conjunto cdrom, etc.). FreeBSD actualmente no implementa muchos <trademark class=\"registered\">Linux</trademark>ioctls (en comparación con NetBSD, por ejemplo) pero el plan es portarlos de NetBSD. La tendencia es usar <trademark class=\"registered\">Linux</trademark> ioctls incluso en los controladores nativos de FreeBSD debido a la fácil migración de las aplicaciones.",
            "id": 93295,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/93295/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26622/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:59:27.690176Z",
            "action": 5,
            "target": "Depuración",
            "id": 93296,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/93296/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26623/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T19:59:37.237101Z",
            "action": 5,
            "target": "Cada llamada al sistema debería ser depurable. Para ello introducimos una pequeña infraestructura. Tenemos la función ldebug, que indica si una llamada al sistema determinada debe depurarse (configurable mediante un sysctl). Para imprimir tenemos macros LMSG y ARGS. Se utilizan para alterar una cadena imprimible para mensajes de depuración uniformes.",
            "id": 93297,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/93297/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/157272/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T20:00:45.234993Z",
            "action": 5,
            "target": "En abril de 2007 el <trademark class=\"registered\">Linux</trademark> La capa de emulación es capaz de emular la <trademark class=\"registered\">Linux</trademark> 2.6.16 kernel bastante bien. Los problemas restantes se refieren a futexes, inacabados * en la familia de llamadas al sistema, entrega de señales problemáticas, falta<function>epoll</function> y <function>inotify</function> y probablemente algunos errores que aún no hemos descubierto. A pesar de esto, somos capaces de ejecutar básicamente todos los <trademark class=\"registered\">Linux</trademark> programas incluidos en FreeBSD Ports Collection con Fedora Core 4 en 2.6.16 y hay algunos informes rudimentarios de éxito con Fedora Core 6 en 2.6.16. Fedora Core 6 linux_base se comprometió recientemente para permitir algunas pruebas adicionales de la capa de emulación y darnos algunas pistas más sobre dónde deberíamos poner nuestro esfuerzo en implementar las cosas que faltan.",
            "id": 93298,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/93298/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/157274/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T20:01:45.355617Z",
            "action": 5,
            "target": "Somos capaces de ejecutar las aplicaciones más utilizadas como <package>www/linux-firefox</package>, <package>net-im/skype</package> y algunos juegos de la colección Ports. Algunos de los programas exhiben un mal comportamiento en la emulación 2.6, pero esto está actualmente bajo investigación y es de esperar que se solucione pronto. La única gran aplicación que se sabe que no funciona es la <trademark class=\"registered\">Linux</trademark> <trademark>Java</trademark> Kit de desarrollo y esto se debe al requisito de <function>epoll</function> instalación que no está directamente relacionada con la <trademark class=\"registered\">Linux</trademark> kernel 2.6.",
            "id": 93299,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/93299/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/157276/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T20:01:53.494958Z",
            "action": 5,
            "target": "Esperamos habilitar la emulación 2.6.16 por defecto algún tiempo después del lanzamiento de FreeBSD 7.0 al menos para exponer las partes de la emulación 2.6 para pruebas más amplias. Una vez hecho esto, podemos cambiar a Fedora Core 6 linux_base, que es el plan definitivo.",
            "id": 93300,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/93300/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26630/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T20:02:14.033783Z",
            "action": 5,
            "target": "El trabajo futuro debe centrarse en solucionar los problemas restantes con futexes, implementar el resto de la familia de llamadas al sistema * at, arreglar la entrega de señal y posiblemente implementar el <function>epoll</function> y <function>inotify</function> instalaciones.",
            "id": 93301,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/93301/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/157278/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T20:02:22.818904Z",
            "action": 5,
            "target": "Esperamos poder ejecutar los programas más importantes sin problemas pronto, por lo que podremos cambiar a la emulación 2.6 por defecto y hacer que Fedora Core 6 sea la linux_base predeterminada porque nuestro Fedora Core 4 que usamos actualmente ya no es compatible.",
            "id": 93302,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/93302/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26632/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T20:02:31.405362Z",
            "action": 5,
            "target": "El otro objetivo posible es compartir nuestro código con NetBSD y DragonflyBSD. NetBSD tiene algo de soporte para la emulación 2.6 pero está lejos de estar terminado y no se ha probado realmente. DragonflyBSD ha expresado cierto interés en portar las mejoras 2.6.",
            "id": 93303,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/93303/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26633/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T20:03:03.615738Z",
            "action": 5,
            "target": "Generalmente, como <trademark class=\"registered\">Linux</trademark> desarrolla nos gustaría mantenernos al día con su desarrollo, implementando syscalls recién agregadas. El empalme viene a la mente primero. Algunas llamadas al sistema ya implementadas también están muy paralizadas, por ejemplo <function>mremap</function> y otros. También se pueden realizar algunas mejoras de rendimiento, bloqueo de grano más fino y otros.",
            "id": 93304,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/93304/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26635/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T20:03:11.346019Z",
            "action": 5,
            "target": "Colaboré en este proyecto con (en orden alfabético):",
            "id": 93305,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/93305/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26645/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T20:03:20.066396Z",
            "action": 5,
            "target": "Me gustaría agradecer a todas esas personas por sus consejos, revisiones de código y apoyo general.",
            "id": 93306,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/93306/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26646/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T20:03:27.897525Z",
            "action": 5,
            "target": "Literaturas",
            "id": 93307,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/93307/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26647/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T20:03:38.135446Z",
            "action": 5,
            "target": "Marshall Kirk McKusick - George V. Nevile-Neil. Diseño e implementación del sistema operativo FreeBSD. Addison-Wesley, 2005.",
            "id": 93308,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/93308/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26560/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/Aaron/?format=api",
            "timestamp": "2020-12-17T20:06:38.832974Z",
            "action": 37,
            "target": "Futex API",
            "id": 93309,
            "action_name": "Marked for edit",
            "url": "https://translate-dev.freebsd.org/api/changes/93309/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/en/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2021-01-09T14:33:00.506506Z",
            "action": 0,
            "target": "",
            "id": 106085,
            "action_name": "Resource update",
            "url": "https://translate-dev.freebsd.org/api/changes/106085/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/229211/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2021-01-09T14:33:00.727036Z",
            "action": 30,
            "target": "There are currently two ways to implement threading in FreeBSD. The first way is M:N threading followed by the 1:1 threading model. The default library used is M:N threading (<literal>libpthread</literal>) and you can switch at runtime to 1:1 threading (<literal>libthr</literal>). The plan is to switch to 1:1 library by default soon. Although those two libraries use the same kernel primitives, they are accessed through different API(es). The M:N library uses the <literal>kse_*</literal> family of syscalls while the 1:1 library uses the <literal>thr_*</literal> family of syscalls. Due to this, there is no general concept of thread ID shared between kernel and userspace. Of course, both threading libraries implement the pthread thread ID API. Every kernel thread (as described by <literal>struct thread</literal>) has td tid identifier but this is not directly accessible from userland and solely serves the kernel's needs. It is also used for 1:1 threading library as pthread's thread ID but handling of this is internal to the library and cannot be relied on.",
            "id": 106086,
            "action_name": "Source string changed",
            "url": "https://translate-dev.freebsd.org/api/changes/106086/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/229212/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2021-01-09T14:33:01.093886Z",
            "action": 30,
            "target": "As there is a difference in view as what to the idea of a process ID and thread ID is between FreeBSD and <trademark class=\"registered\">Linux</trademark> we have to translate the view somehow. We do it by PID mangling. This means that we fake what a PID (=TGID) and TID (=PID) is between kernel and userland. The rule of thumb is that in kernel (in Linuxulator) PID = PID and TGID = shared -&gt; group pid and to userland we present <literal>PID = shared -&gt; group_pid</literal> and <literal>TID = proc -&gt; p_pid</literal>. The PID member of <literal>linux_emuldata structure</literal> is a FreeBSD PID.",
            "id": 106087,
            "action_name": "Source string changed",
            "url": "https://translate-dev.freebsd.org/api/changes/106087/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/229213/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2021-01-09T14:33:01.118405Z",
            "action": 30,
            "target": "The locking is implemented to be per-subsystem because we do not expect a lot of contention on these. There are two locks: <literal>emul_lock</literal> used to protect manipulating of <literal>linux_emuldata</literal> and <literal>emul_shared_lock</literal> used to manipulate <literal>linux_emuldata_shared</literal>. The <literal>emul_lock</literal> is a nonsleepable blocking mutex while <literal>emul_shared_lock</literal> is a sleepable blocking <literal>sx_lock</literal>. Due to the per-subsystem locking we can coalesce some locks and that is why the em find offers the non-locking access.",
            "id": 106088,
            "action_name": "Source string changed",
            "url": "https://translate-dev.freebsd.org/api/changes/106088/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/229214/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2021-01-09T14:33:01.157540Z",
            "action": 30,
            "target": "Threaded programs should be written with as little contention on locks as possible. Otherwise, instead of doing useful work the thread just waits on a lock. As a result of this, the most well written threaded programs show little locks contention.",
            "id": 106089,
            "action_name": "Source string changed",
            "url": "https://translate-dev.freebsd.org/api/changes/106089/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2021-01-09T14:33:01.326424Z",
            "action": 0,
            "target": "",
            "id": 106090,
            "action_name": "Resource update",
            "url": "https://translate-dev.freebsd.org/api/changes/106090/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/229216/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2021-01-09T14:33:01.586922Z",
            "action": 30,
            "target": "There are currently two ways to implement threading in FreeBSD. The first way is M:N threading followed by the 1:1 threading model. The default library used is M:N threading (<literal>libpthread</literal>) and you can switch at runtime to 1:1 threading (<literal>libthr</literal>). The plan is to switch to 1:1 library by default soon. Although those two libraries use the same kernel primitives, they are accessed through different API(es). The M:N library uses the <literal>kse_*</literal> family of syscalls while the 1:1 library uses the <literal>thr_*</literal> family of syscalls. Due to this, there is no general concept of thread ID shared between kernel and userspace. Of course, both threading libraries implement the pthread thread ID API. Every kernel thread (as described by <literal>struct thread</literal>) has td tid identifier but this is not directly accessible from userland and solely serves the kernel's needs. It is also used for 1:1 threading library as pthread's thread ID but handling of this is internal to the library and cannot be relied on.",
            "id": 106091,
            "action_name": "Source string changed",
            "url": "https://translate-dev.freebsd.org/api/changes/106091/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/229217/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2021-01-09T14:33:01.924962Z",
            "action": 30,
            "target": "As there is a difference in view as what to the idea of a process ID and thread ID is between FreeBSD and <trademark class=\"registered\">Linux</trademark> we have to translate the view somehow. We do it by PID mangling. This means that we fake what a PID (=TGID) and TID (=PID) is between kernel and userland. The rule of thumb is that in kernel (in Linuxulator) PID = PID and TGID = shared -&gt; group pid and to userland we present <literal>PID = shared -&gt; group_pid</literal> and <literal>TID = proc -&gt; p_pid</literal>. The PID member of <literal>linux_emuldata structure</literal> is a FreeBSD PID.",
            "id": 106092,
            "action_name": "Source string changed",
            "url": "https://translate-dev.freebsd.org/api/changes/106092/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/229218/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2021-01-09T14:33:01.949099Z",
            "action": 30,
            "target": "The locking is implemented to be per-subsystem because we do not expect a lot of contention on these. There are two locks: <literal>emul_lock</literal> used to protect manipulating of <literal>linux_emuldata</literal> and <literal>emul_shared_lock</literal> used to manipulate <literal>linux_emuldata_shared</literal>. The <literal>emul_lock</literal> is a nonsleepable blocking mutex while <literal>emul_shared_lock</literal> is a sleepable blocking <literal>sx_lock</literal>. Due to the per-subsystem locking we can coalesce some locks and that is why the em find offers the non-locking access.",
            "id": 106093,
            "action_name": "Source string changed",
            "url": "https://translate-dev.freebsd.org/api/changes/106093/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/229219/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2021-01-09T14:33:01.991621Z",
            "action": 30,
            "target": "Threaded programs should be written with as little contention on locks as possible. Otherwise, instead of doing useful work the thread just waits on a lock. As a result of this, the most well written threaded programs show little locks contention.",
            "id": 106094,
            "action_name": "Source string changed",
            "url": "https://translate-dev.freebsd.org/api/changes/106094/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2021-01-09T14:33:02.162947Z",
            "action": 0,
            "target": "",
            "id": 106095,
            "action_name": "Resource update",
            "url": "https://translate-dev.freebsd.org/api/changes/106095/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2021-01-09T14:33:02.220408Z",
            "action": 44,
            "target": "",
            "id": 106096,
            "action_name": "New strings to translate",
            "url": "https://translate-dev.freebsd.org/api/changes/106096/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2021-01-09T14:33:02.231427Z",
            "action": 44,
            "target": "",
            "id": 106097,
            "action_name": "New strings to translate",
            "url": "https://translate-dev.freebsd.org/api/changes/106097/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": null,
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": null,
            "timestamp": "2021-01-30T15:43:59.971510Z",
            "action": 14,
            "target": "",
            "id": 107528,
            "action_name": "Component locked",
            "url": "https://translate-dev.freebsd.org/api/changes/107528/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": null,
            "user": null,
            "author": null,
            "timestamp": "2021-06-18T21:09:09.425583Z",
            "action": 47,
            "target": "",
            "id": 330885,
            "action_name": "New alert",
            "url": "https://translate-dev.freebsd.org/api/changes/330885/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/en/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2021-09-18T23:09:00.080973Z",
            "action": 0,
            "target": "",
            "id": 336582,
            "action_name": "Resource update",
            "url": "https://translate-dev.freebsd.org/api/changes/336582/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2021-09-18T23:09:04.682058Z",
            "action": 0,
            "target": "",
            "id": 336590,
            "action_name": "Resource update",
            "url": "https://translate-dev.freebsd.org/api/changes/336590/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2021-09-18T23:09:07.585292Z",
            "action": 0,
            "target": "",
            "id": 336595,
            "action_name": "Resource update",
            "url": "https://translate-dev.freebsd.org/api/changes/336595/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/en/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2021-09-18T23:34:04.072551Z",
            "action": 0,
            "target": "",
            "id": 337732,
            "action_name": "Resource update",
            "url": "https://translate-dev.freebsd.org/api/changes/337732/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/es/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2021-09-18T23:34:09.487007Z",
            "action": 0,
            "target": "",
            "id": 337741,
            "action_name": "Resource update",
            "url": "https://translate-dev.freebsd.org/api/changes/337741/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2021-09-18T23:34:12.388056Z",
            "action": 0,
            "target": "",
            "id": 337746,
            "action_name": "Resource update",
            "url": "https://translate-dev.freebsd.org/api/changes/337746/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": null,
            "user": null,
            "author": null,
            "timestamp": "2021-11-17T03:30:03.174253Z",
            "action": 47,
            "target": "",
            "id": 345503,
            "action_name": "New alert",
            "url": "https://translate-dev.freebsd.org/api/changes/345503/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": null,
            "user": null,
            "author": null,
            "timestamp": "2022-09-23T22:20:42.924676Z",
            "action": 47,
            "target": "",
            "id": 380104,
            "action_name": "New alert",
            "url": "https://translate-dev.freebsd.org/api/changes/380104/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": null,
            "user": null,
            "author": null,
            "timestamp": "2023-04-22T03:55:08.492560Z",
            "action": 47,
            "target": "",
            "id": 516427,
            "action_name": "New alert",
            "url": "https://translate-dev.freebsd.org/api/changes/516427/?format=api"
        }
    ]
}