bismon (este es un nombre temporal ) es un monitor persistente que (en el futuro) interactuaría con el compilador GCC a través de complementos. Es (o se convertirá) de alguna manera un sucesor de mi antiguo proyecto GCC Melt; El objetivo de mediano plazo también es el análisis del código fuente del programa estático con la ayuda de GCC. El repositorio del código fuente (GPLV3+ con licencia) está en https://github.com/bstarynk/bismon .. my (basile starynkevitch, empleado en CEA, lista en Francia) El trabajo en bismon está financiado parcialmente (desde el comienzo de 2018 hasta el final de 2020) por la Unión Europea, el programa H2020 H2020, el Proyecto Chariot, bajo el acuerdo de acuerdo no 7800. Análisis de algún tipo de software IoT codificado en C o C ++ y (cruzado) compilado por GCC en algún escritorio de Linux. En 2019 - 2021, el desarrollo de bismon también está financiado en parte por el proyecto Decoder H2020, bajo el Acuerdo de subvención 824231 (relacionado con su monitor de conocimiento persistente WP1).
Actualmente (inicio de 2021) bismon todavía está en beta -etapa, y es un software libre bajo la licencia GPLV3+. Está destinado a una estación de trabajo de Desarrollador de escritorio Linux X86-64 (no funcionará en Windows o MacOSX o Android).
Se puede generar una documentación aún incompleta (como informe técnico doc/bismon-doc.pdf en PDF) (con make Then luego make doc ; ese comando requiere que tenga un directorio $HOME/tmp/ ). Un borrador temprano (no oficial) de ese informe podría estar disponible en http://starynkevitch.net/basile/bismon-doc.pdf
While Bismon is currently funded by H2020 projects with static-analysis goals, please notice that Bismon might later -when more mature, after 2024- be probably usable as a somehow generic framework , with a lot of additional work (years, not months), for many other purposes (the most significant limit being your imagination, and the power of your computer), including perhaps even some kind of AI system (read J.Pitrat's book Artificial Beings: the conscious de una máquina consciente , ISBN: 978-1848211018), entornos gráficos sofisticados de escritorio, muchas herramientas de software colaborativas basadas en la web interactivas utilizadas simultáneamente por algún equipo o aplicaciones de bases de datos de objetos o problemas relevantes. Dado que Bismon tiene licencia GPLV3+, cualquier software futuro que lo use debería, en mi humilde opinión, prácticamente también ser GPLV3+ (pero otros esquemas de licencia podrían ser posibles, contácteme en [email protected] para más; sin embargo, Ianal ...)
[Conjuntos de estándares de codificación C ++ Vehicule C ++] (https://www.stroustrup.com/jsf-av-rules.pdf)
[Excepciones deterministas cero-overhead: valores de lanzamiento] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0709r4.pdf)
[Estandarización de C ++, Documentos 2021] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/)
Desarrolle algún tipo de lenguaje de dominio de alto nivel (más expresivo y más declarativo) para facilitar el análisis del código fuente del programa estático por encima de GCC y generar complementos GCC para TI, por lo que las mismas motivaciones que el GCC Melt (y las motivaciones más amplias relacionadas, a Coccinnelle, Frama-C, Rascal, Crossminer, Clang Analyzer, Clasp etc ...).).).
Las características y objetivos importantes de ese lenguaje específico del dominio y su implementación incluyen:
persistencia ortogonal; Esta es una característica importante (útil para el análisis de código fuente estático de programa completo de un programa analizado hecho de varias unidades de traducción, cada una compilada de forma independiente) que no era de manera realista a la fusión de GCC, por lo que requiere un rediseño completo. Se espera que el proceso bismon sea relativamente de larga duración, y conserva la mayoría de sus datos de una ejecución a la siguiente (en la store*.bmon archivos textuales). En el futuro, el proceso bismon se comunicará con los procesos de compilación gcc o g++ (cruzados) (utilizando algún complemento GCC, para ser generado por el propio bismon )
Tipeo dinámico como en Python, Scheme, Ruby, JavaScript, ... (y de alguna manera se derrite).
múltiples subprocesos pero sin ningún gil. Un pequeño grupo de hilos de trabajadores está obteniendo repetidamente y simultáneamente tareas de una agenda global. Cada tarea se ejecuta rápidamente (milisegundos) en algún hilo de trabajadores y puede actualizar esa agenda (por ejemplo, agregando para continuar).
reflexivo
homoicónico
Precisamente basura recolectada
declarativo, con buena coincidencia de patrones y reglas formalismos
Bootstrapped y compilado a C, tal vez algunas partes usando GCCJIT.
tan metaprogramado
Generación de complementos GCC (en C ++) que interactuarían con bismon por algún mecanismo RPC
Observe que la sintaxis y la semántica (aún indocumentada) de bismon es el trabajo en progreso y está sujeto a cambios incompatibles.
Cuando bismon se completará hasta el punto de ser utilizable, generalmente sería utilizado por un pequeño equipo de desarrolladores que trabajan juntos en algún proyecto de software (común) codificado principalmente en C o C ++ (y preferiblemente en un proyecto de software libre).
La mayor parte de bismon se encuentra en C99 o C11 (incluida una cantidad creciente de código C generado bajo modules/ ), pero algunos pocos código escrito a mano están en C ++ 14 (especialmente misc_BM.cc y los encabezados C generadores de metaprograma BM_makeconst.cc ).
En Linux/X86-64 (por ejemplo, Debian/Instable o Buster o reciente Ubuntu 18 o 19) solo (sin parches o trabajo adicionales, ¡ Bismon no funcionará en 32 máquinas de 32 bits!)::
Debería poder compilar muchos paquetes de software de código abierto para su código fuente. Debe tener un sistema reciente de GNU/Linux con acceso raíz, preferiblemente 32Gigabytes o más de RAM, un procesador X86-64 con al menos 4 núcleos y al menos 250gbíes de espacio en disco libre. Se espera que esté fluido con la interfaz de la línea de comandos de Linux y los shells Unix como GNU Bash o ZSH. Debe poder poder compilar GCC 10 o preferiblemente incluso GCC 11 de su código fuente y estar familiarizado con los editores de código fuente como GNU Emacs, VIM, Geany, etc., disfrutó leyendo SICP.
Consulte también el subdirectorio de dependencias y sus dependencias ReadMe, tal vez no actualizadas.
GCC reciente (SO GCC 10 o preferiblemente GCC 11 ...), con soporte y complementos C ++ y JIT habilitados (verifique con gcc -v ; si su sistema gcc y g++ carecen de soporte para complementos y libgccjit, debe construir e instalar una versión reciente de GCC desde su código fuente, y configurarlo para proporcionarlos).). No se puede usar un GCC antiguo (por ejemplo, la versión 9 o antes).
'/usr/src/Lang/gcc-11.1.0/configure' '-v' '--prefix=/usr/local' '--with-gcc-major-version-only' '--program-suffix=-11' '--enable-shared' '--enable-linker-build-id' '--enable-nls' '--enable-bootstrap' '--enable-clocale=gnu' '--enable-libstdcxx-debug' '--enable-libstdcxx-time=yes' '--with-default-libstdcxx-abi=new' '--enable-gnu-unique-object' '--disable-vtable-verify' '--enable-plugin' '--enable-default-pie' '--with-system-zlib' '--enable-libphobos-checking=release' '--with-target-system-zlib=auto' '--enable-objc-gc=auto' '--enable-multiarch' '--disable-werror' '--with-arch-32=i686' '--with-abi=m64' '--with-multilib-list=m32,m64,mx32' '--enable-multilib' '--with-tune=native' 'CFLAGS=-O2 -g' 'CXXFLAGS=-O2 -g' '--enable-host-shared' '--enable-languages=c,c++,d,go,jit,lto' ....Un Python 3 reciente con PIP instalado.
La documentación necesita A /usr/bin/mipsel-linux-gnu-gcc-8 Cross-Compiler proporcionado por el paquete gcc-8-mipsel-linux-gnu Debian. Cuidado, ese paquete entra en conflicto con los paquetes gcc-multilib* en Debian.
Ninja Builder, Versión 1.8 o más nuevo se necesita (y es iniciado por make ). No use uno más antiguo (consulte con ninja --version ; si eso no funciona, su ninja es demasiado viejo).
Se requiere un intérprete reciente de Guile, versión 2 o mejor (preferiblemente Guile 2.2). No sé y no me gusta mucho Python y el intérprete de Guile es GNU, LGPLV3+y mucho más familiar para mí. Además, los conceptos de los dialectos LISP, como el esquema (el lenguaje implementado por Guile ), son muy relevantes para comprender a Bismon , donde se utiliza Guile para generar el script build.ninja utilizado por el Builder Ninja.
Un reciente mailutils mejorado en la astucia, que es el debian mailutils-guile que proporciona el ejecutable /usr/bin/guimb .
GLIB 2.58 o mejor (que también es necesario para GTK arriba), porque se necesitan algunas rutinas de bajo nivel, especialmente UTF-8 relacionadas.
Jansson 2.12 o mejor se necesita para JSON (utilizado en relación con WebSockets).
Se necesitaba libonion para la interfaz web, pero se eliminó el 27 de junio de 2022, Git Commit a943cf687c748 o TAGE no-more-ibonion-tag (con error tipográfico: faltante l ). Antes de ese compromiso, busque la bandera del preprocesador BISMON_LIBONION .
GNU hace 4 o mejor
CCACHE se usa para evitar recompilaciones inútiles. Si no lo tiene, deberá editar nuestro Makefile para la compilación de módulos generados.
LibBackTrace: a veces es parte de su sistema GCC , pero es mejor que lo instale por separado (por ejemplo, en su /usr/local/ prefijo)
se requiere markdown para alguna documentación, como este README.md
La sangría GNU (2.2.x por fin) y Astyle (3.1 al menos) son útiles para make indent . Ahora se requiere indent para módulos generados.
TARDY (un archivo tar postprocesador) se utiliza para generar documentación.
El látex, probablemente como Texlive Suite o Luatex y utilidades relacionadas ( pdflatex , makeidx , bibtex ...) con Inkscape y Hevea y Xindy son necesarios para la documentación.
En Ubuntu de Debian/inestable o reciente, apt-get install build-essential make ninja-build gcc-8 g++-8 gcc-8-plugin-dev libgccjit-8-dev ccache gcc-8-mipsel-linux-gnu inkscape hevea texlive-full xindy fonts-inconsolata ttf-ubuntu-font-family fonts-ubuntu ttfautohint guile-2.2 mailutils-guile para la infraestructura de construcción; Observe que gcc-8-mipsel-linux-gnu es el compilador cruzado MIPSEL GCC: está en conflicto con los paquetes gcc-multilib* ; inkscape , hevea , texlive-full (un enorme meta-paquete), xindy , fonts-inconsolata , fonts-ubuntu , ttfautohint son necesarios para generar la documentación.
Todavía necesitamos apt-get install libgtk-3-dev para GTK 3. Esto puede extraer muchas dependencias.
E apt-get install libglib2.0-dev libjansson-dev para nuestro glib y jansson requerido dependencias.
libbacktrace no está empaquetado independientemente en Debian. Recomiendo construirlo e instalarlo desde su código fuente, o de lo contrario (no recomendado, pero factible) edite el Makefile para utilizar el compilador de gcc de su sistema.
El libonion no está empaquetado independientemente en Debian.
apt-get install markdown indent astyle tardy y apt-get install texlive texlive-full hevea
Las dependencies/ subdirectorio son para git submodule -s relacionados con libbacktrace y libonion
Es posible que deba agregar .mjs como sufijo válido o extensión de archivo para application/javascript mime tipo en su archivo del sistema /etc/mime.types . Lea sobre los módulos JavaScript en la web y vea Debian Bug#927300.
Ejecute locale para asegurarse de que su localización sea compatible con Posix o inglés (británico o estadounidense) en UTF-8 (por ejemplo, no puede ser italiano, griego o francés). Por lo tanto, debe ser POSIX o C o en_US.UTF-8 o en_GB.UTF-8 . Es posible que desee establecer sus variables de entorno adecuadamente (al menos LANG=en_US.UTF-8 y LANGUAGE=en_US:en y LC_ALL=en_US.UTF-8 , sin otra variable de entorno LC_* ). Ver Locale (1), Locale (7), UTF-8 (7), Locale (5), SetLocale (3). Pero no me pidas que entienda más estos detalles de internacionaliza y localización muy sutiles, ese tema es muy complejo. Si aún necesita ese trabajo para hacer, envíeme un correo electrónico en el trabajo a [email protected] . Pero no esperes que lo haga antes de 2024.
La extensión del archivo .mjs es para módulos JavaScript. Si su archivo /etc/mime.types (utilizado por libonion ) no lo sabe, debe agregar allí las siguientes líneas (la primera línea a continuación, con un hash # , es un comentario; lo importante es la línea que menciona mjs ).
# in your /etc/mime.types for JavaScript modules
application/javascript mjs
La generación de documentación necesita un directorio $HOME/tmp/ .
Se debe dar un contacto responsable humano principal en un archivo contact_BM (los comentarios que comienzan con # se aceptan dentro, pero debe tener una línea inspirada en John Doe <[email protected]> ). Ese archivo debe estar en el directorio actual o en su directorio de inicio o explícitamente administrado con --contact-file=PATH . Mi archivo ~/contact_BM podría ser:
# file $HOME/contact_BM
Bismon master (Basile Starynkevitch) <[email protected]>
git Es posible que desee (adaptar esta sugerencia y definir su cabezal personalizado personalizado) para mejorar la salida interactiva de git diff en store*.bmon archivos de datos persistentes. Quizás algo inspirado en git config diff.bismon.xfuncname '"^«_[0-9A-Za-z_]*$"' podría funcionar, pero en realidad no.
Clone este repositorio git como de costumbre, y construya luego use bismon dentro del árbol de origen obtenido.
Mire el Makefile y edítelo si es necesario; Tal vez actualice las líneas PREPROFLAGS= y LIBES= , por ejemplo, para usar el GCC libbacktrace de su sistema, agregando $(shell gcc-7 -print-file-name=include) en PREPROFLAGS= line y $(shell gcc-7 -print-file-name=libbacktrace.a) a la LIBES= línea. Por supuesto, reemplace el 7 por 8 si es apropiado. Tal vez necesite establecer explícitamente GCC= y GXX= a sus compiladores específicos de GCC C y C ++ .
make o make -j3
El mecanismo de persistencia se prueba por make redump
El programa ./bismon todavía está utilizando GTK y Libonion. Queremos deshacernos de GTK. Está simulado como bismongtk y bismonion .
Asegúrese de ejecutar bismon , bismongtk o bismonion con --help al principio para comprender las opciones de programa que están disponibles.
bismon (al menos su versión web) necesita saber sobre usted. Por lo tanto, debe registrarse una vez en él (y eso crecería su estado persistente). Y bismon (más exactamente bismonion ) tiene un formulario de inicio de sesión, por lo que debe tener una contraseña (específica para bismon , no relacionada con cualquier otra contraseña que tenga).
Primero debe inicializar un archivo de contraseña vacía (el archivo de contraseña predeterminado es ~/passwords_BM ; puede especificar otro en la línea de comando). Así que ejecute el comando touch ~/passwords_BM en un terminal (shell) para crear ese archivo vacío. Luego, debe restringir su permiso (legible y redactado solo por su usuario Unix) con chmod u+rw,go-rwx ~/passwords_BM . Por fin, consulte con ls -ls ~/passwords_BM que este archivo está vacío y legible y solo que usted solo sea por usted.
Entonces te registrarás. Si Alan Turing es su nombre o pseudo, y [email protected] es su correo electrónico principal, con su correo electrónico secundario turing@localhost , puede agregarle a bismon ejecutándolo con algo similar a --contributor='Alan Turing;[email protected];turing@localhost' y --batch y --dump-after-load=. Opciones de programa. Por supuesto, debe reemplazar Alan Turing , [email protected] y turing@localhost por lo que sea apropiado para usted. El correo electrónico secundario (también llamado alias) es opcional. Si no lo usa (por lo que si no proporciona ningún alias, lo que es probable, por lo tanto, reemplace turing@localhost con una cadena vacía), bismon no sabe más sobre usted que git (consulte la configuración Git para user.email y user.name ). Incluso puede codificar algún script de shell para extraer esa información de datos personales de git y ponerla en bismon .
Por último, debe establecer su contraseña (no está relacionado con otras contraseñas en su computadora o en la web, pero debe tener al menos 10 caracteres unicode, y dígitos, letras, puntuaciones), como se sabe que bismon , utilizando la opción --add-passwords (también con --batch y --dump-after-load=. . To set your initial password to mypass!123456 create some temporary text file (it contains contributor names and their updated passwords in clear text, so you should not keep it), perhaps /tmp/addpassbismon , containing for example Alan Turing:mypass!123456 add run bismonion with --add-passwords=/tmp/addpassbismon --batch then remove /tmp/addpassbismon . Por supuesto, será mejor que escriba algunos script de shell envolviendo eso, y asegúrese de tener una contraseña lo suficientemente fuerte que no esté en este README.md .
Quizás pueda agregar a algunos otros usuarios (probablemente menos de una docena) en el que confíe y que puedan funcionar con usted. Todos los usuarios podrían meterse o abusar del sistema bismon tan fácilmente como pudiera. Asegúrese de cumplir con el GDPR si alguno de sus usuarios es europeo (y el cumplimiento del GDPR es entonces su responsabilidad ). El formulario de inicio de sesión está plantado (con código de web_ONIONBM.c ) del archivo de origen login_ONIONBM.thtml (y puede mejorar el texto dentro de ese archivo si lo desea).
bismon Todavía no se puede utilizar, excepto por mí (Basile) en julio de 2018 (aún no hay análisis de código fuente estático, todavía no hay generación de complementos GCC). Si desea ver algo usando GTK, ejecute ./bismongtk , escriba the_system en la ventana de comando etiquetada New-Bismon , entonces las teclas CTRL y de retorno presionadas. Si desea ver algo a través de la interfaz web, ejecute ./bismonion luego abra su URL (quizás localhost:8086/ o lo que se haya especificado con --web-base ) en su navegador web.
Se recomienda ejecutar make clean de vez en cuando (por ejemplo, diariamente o semanalmente). Al generar archivos, bismon hace una copia de seguridad de su versión anterior.
Pregúntame (basile Starynkevitch, [email protected] o [email protected] ...) para más detalles.
Este repositorio git también contiene, por conveniencia, el marco JQueryui 1.12 (que tiene una licencia MIT diferente) bajo webroot/jquery-ui
Úselo (como stopbismon ) su propio riesgo, si $HOME/bismon contiene el código fuente de Bismon y el ejecutable:
#!/bin/bash -x
# script stopbismon
if [ -f $HOME/bismon/_bismon.pid ]; then
kill -TERM $(/bin/head -1 $HOME/bismon/_bismon.pid)
else
pkill bismon
fi
Este es software gratuito inédito
Es probable que la licencia (GPLV3+) no cambie (se especifica contractualmente en la subvención de carro). El aviso de derechos de autor probablemente sea incorrecto: en los archivos generados, aún no es conforme a las expectativas de GPL. Estos detalles están pendientes de errores, pero también hay muchos más errores.
El autor está plenamente consciente, a mediados de 2019, de varios errores en este sistema bismon , un proyecto de investigación, pero corregirlos no es una prioridad (ya que continuar la bootstrap progresiva de Bismon es mucho más importante y aún no se logra). La interfaz GTK es errónea por diseño y se bloquea a menudo (que no se corregirán), y debe ser lo más rápido posible reemplazada por una interfaz web más utilizable, y eso es funcionar en progreso a mediados de 2019. Comuníquese por correo electrónico al autor para obtener posibles soluciones. Observe que tales errores temporales conocidos por el autor no están registrados como problemas de Bismon gitlab , ya que este software aún está inédito.
En Commit 24E400E4B25EA8FBD91, la documentación no se puede generar.
Eliminar input{appendix-bm} del archivo bismon-doc.tex no resuelva ese error.
La forma preferida de informarlos es agregar un nuevo problema en https://github.com/bstarynk/bismon
Por supuesto, un problema debe ser autónomo. Dé explícitamente la salida de bismon --version en su computadora si ha podido construir bismon .
Si el problema está relacionado con la construcción del ejecutable bismon , proporcione explícitamente todos los comandos de Linux que ha ejecutado (después de haber examinado y ejecutar con éxito el script distclean-script.bash , o justo después de algún comando Fresh git clone ). Mencione la salida de git log -3 .
Alternativamente (si no desea agregar un problema github ), envíe un correo electrónico (UTF-8 codificado, HTML5 es preferible) en inglés, o en francés (o tal vez en ruso, solo si no puede enviar un correo electrónico en inglés o francés) a [email protected] o [email protected]. Intentaré responder en inglés o en francés (ya que mi ruso escrito es tan malo).
Si necesita enviar una captura de pantalla, adjunte alguna imagen codificada como JPEG o PNG a su correo electrónico.
Si desea o necesita enviar varios archivos, archíquelos todos en un directorio único (cuyo nombre de base (1) contiene solo letras, dígitos y algunos subrayados _ ) y haga un archivo de alquitrán (1) de ellas. Dame explícitamente el comando tar que necesito ejecutar (en Linux) para extraer tu archivo. Podrías suponer que tengo la versión 1.30 de Tar GNU o mejor en mi computadora Linux.
Si bismon me envía algún código C o C ++, permítame explícitamente compilarlo y agregar comentarios (UTF8 codificado) en inglés, francés o ruso.
Si es posible, agregue algún script de shell (para GNU Bash o para ZSH ...) que me permite reproducir ese error y nombrar ese script en su informe de correo electrónico o error.
Mi empleador (si está fuera de CEA ...) podría preferir también alguna información relacionada con la financiación, la colaboración formal, etc. Si es posible mencionarlos explícitamente en inglés o en francés en su correo electrónico.