Итак, уже стало доброй традицией ловить гражданина рекламного агента trink'а на бессовестном вранье. 

Мы уже с вами, господа присяжные заседатели, один раз убедились, что гражданин рекламный агент trink не владеет информацией по поводу FreeBasic, тем не менее применяет здесь грязные рекламные трюки в виде утверждения, что там отсутствуют кроссплатформенные функции. И было совершенно однозначно доказано, что гражданин trink врёт.
Поскольку гражданин рекламный агент trink не захотел признать свою вину добровольно и, видимо в качестве защитного аргумента, выдвинул следующую порцию вранья, заключаюшуюся в том, что якобы рекламируемый им коммерческий продукт не использует сторонние библиотеки для создания графического интерфейса пользователя.
Сторона обвинения вынуждена была по по этому поводу провести экспертизу за свой счёт. Экспертиза заключалась в следующем:
1. Был взят код, предоставленный гражданином рекламным агентом trink'ом, который он предоставил как доказательство создания графического интерфейса пользователя без применения сторонних библиотек.
2. Данный код был откомпилирован демо-версией рекламного продукта.
3. Откомпилированный бинарный файл был исследован на наличие в нём привязки к 
сторонним библиотекам и использования функций из этих сторонних библиотек.
Результаты экспертизы:
1. Наличие привязки к сторонним библиотеам проверялось с помощью команды
- Код: Выделить всё
- ldd откомпилированная_программа_гражданина_trink'а
Вот результат исследования:
- Код: Выделить всё
-    linux-vdso.so.1 =>  (0x00007fffc3aeb000)
 libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9b48c07000)
 libgtk-x11-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 (0x00007f9b485cb000)
 libgdk-x11-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0 (0x00007f9b48318000)
 libgdk_pixbuf-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0 (0x00007f9b480f8000)
 libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f9b47ea7000)
 libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f9b47ba5000)
 libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9b47988000)
 libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9b475c0000)
 libgmodule-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007f9b473bb000)
 libpangocairo-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so.0 (0x00007f9b471ae000)
 libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f9b46e79000)
 libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007f9b46c72000)
 libatk-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libatk-1.0.so.0 (0x00007f9b46a50000)
 libcairo.so.2 => /usr/lib/x86_64-linux-gnu/libcairo.so.2 (0x00007f9b46747000)
 libgio-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0 (0x00007f9b463e3000)
 libpangoft2-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0 (0x00007f9b461ce000)
 libpango-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0 (0x00007f9b45f82000)
 libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f9b45d45000)
 libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007f9b45b3b000)
 libXinerama.so.1 => /usr/lib/x86_64-linux-gnu/libXinerama.so.1 (0x00007f9b45938000)
 libXi.so.6 => /usr/lib/x86_64-linux-gnu/libXi.so.6 (0x00007f9b45727000)
 libXrandr.so.2 => /usr/lib/x86_64-linux-gnu/libXrandr.so.2 (0x00007f9b4551d000)
 libXcursor.so.1 => /usr/lib/x86_64-linux-gnu/libXcursor.so.1 (0x00007f9b45313000)
 libXcomposite.so.1 => /usr/lib/x86_64-linux-gnu/libXcomposite.so.1 (0x00007f9b4510f000)
 libXdamage.so.1 => /usr/lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007f9b44f0c000)
 libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f9b44cfa000)
 libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f9b44af1000)
 libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f9b448b2000)
 /lib64/ld-linux-x86-64.so.2 (0x00007f9b48f30000)
 libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9b446ad000)
 libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f9b4440b000)
 libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f9b441ed000)
 libpixman-1.so.0 => /usr/lib/x86_64-linux-gnu/libpixman-1.so.0 (0x00007f9b43f43000)
 libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f9b43d1d000)
 libxcb-shm.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007f9b43b1a000)
 libxcb-render.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-render.so.0 (0x00007f9b43910000)
 libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f9b436f7000)
 librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f9b434ef000)
 libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f9b432cc000)
 libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f9b430b2000)
 libharfbuzz.so.0 => /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007f9b42e60000)
 libthai.so.0 => /usr/lib/x86_64-linux-gnu/libthai.so.0 (0x00007f9b42c56000)
 libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f9b42a2c000)
 libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f9b42827000)
 libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f9b42621000)
 libgraphite2.so.3 => /usr/lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007f9b42406000)
 libdatrie.so.1 => /usr/lib/x86_64-linux-gnu/libdatrie.so.1 (0x00007f9b421ff000)
 
Батюшки!!!! использование библиотек gtk и gdk в явном виде!!!! 

Впрочем, возможно они там привязались просто так? А вот на это нам ответит:
2. Наличие используемых функций из сторонних библиотек проверялось с помощью
- Код: Выделить всё
- objdump -R откомпилированная_программа_гражданина_trink'а
И какие же функции использует данная программа:
- Код: Выделить всё
- ./purebasic.out:     формат файла elf64-x86-64
 
 DYNAMIC RELOCATION RECORDS
 OFFSET           TYPE              VALUE
 000000000060cff8 R_X86_64_GLOB_DAT  __gmon_start__
 000000000060d018 R_X86_64_JUMP_SLOT  g_free
 000000000060d020 R_X86_64_JUMP_SLOT  gtk_window_unmaximize
 000000000060d028 R_X86_64_JUMP_SLOT  gtk_window_deiconify
 000000000060d030 R_X86_64_JUMP_SLOT  gtk_label_set_line_wrap
 000000000060d038 R_X86_64_JUMP_SLOT  memset
 000000000060d040 R_X86_64_JUMP_SLOT  ftell
 000000000060d048 R_X86_64_JUMP_SLOT  gtk_box_get_type
 000000000060d050 R_X86_64_JUMP_SLOT  gtk_window_new
 000000000060d058 R_X86_64_JUMP_SLOT  memcpy
 000000000060d060 R_X86_64_JUMP_SLOT  gtk_fixed_set_has_window
 000000000060d068 R_X86_64_JUMP_SLOT  g_object_get_data
 000000000060d070 R_X86_64_JUMP_SLOT  __gmon_start__
 000000000060d078 R_X86_64_JUMP_SLOT  gtk_widget_modify_font
 000000000060d080 R_X86_64_JUMP_SLOT  g_object_unref
 000000000060d088 R_X86_64_JUMP_SLOT  gtk_label_new
 000000000060d090 R_X86_64_JUMP_SLOT  fseek
 000000000060d098 R_X86_64_JUMP_SLOT  gtk_widget_modify_style
 000000000060d0a0 R_X86_64_JUMP_SLOT  gtk_vbox_new
 000000000060d0a8 R_X86_64_JUMP_SLOT  exit
 000000000060d0b0 R_X86_64_JUMP_SLOT  g_strdup
 000000000060d0b8 R_X86_64_JUMP_SLOT  pthread_mutexattr_destroy
 000000000060d0c0 R_X86_64_JUMP_SLOT  strcasecmp
 000000000060d0c8 R_X86_64_JUMP_SLOT  gtk_widget_get_modifier_style
 000000000060d0d0 R_X86_64_JUMP_SLOT  gettimeofday
 000000000060d0d8 R_X86_64_JUMP_SLOT  gtk_widget_get_type
 000000000060d0e0 R_X86_64_JUMP_SLOT  gtk_widget_destroy
 000000000060d0e8 R_X86_64_JUMP_SLOT  g_object_set_data_full
 000000000060d0f0 R_X86_64_JUMP_SLOT  malloc
 000000000060d0f8 R_X86_64_JUMP_SLOT  __libc_start_main
 000000000060d100 R_X86_64_JUMP_SLOT  g_convert
 000000000060d108 R_X86_64_JUMP_SLOT  gtk_label_set_text
 000000000060d110 R_X86_64_JUMP_SLOT  gtk_accel_group_new
 000000000060d118 R_X86_64_JUMP_SLOT  gtk_window_set_type_hint
 000000000060d120 R_X86_64_JUMP_SLOT  g_malloc
 000000000060d128 R_X86_64_JUMP_SLOT  gtk_window_maximize
 000000000060d130 R_X86_64_JUMP_SLOT  gtk_fixed_get_type
 000000000060d138 R_X86_64_JUMP_SLOT  gdk_window_set_decorations
 000000000060d140 R_X86_64_JUMP_SLOT  pthread_mutex_init
 000000000060d148 R_X86_64_JUMP_SLOT  gtk_frame_new
 000000000060d150 R_X86_64_JUMP_SLOT  gtk_window_set_skip_taskbar_hint
 000000000060d158 R_X86_64_JUMP_SLOT  gdk_window_get_frame_extents
 000000000060d160 R_X86_64_JUMP_SLOT  gtk_widget_show_all
 000000000060d168 R_X86_64_JUMP_SLOT  gtk_frame_set_shadow_type
 000000000060d170 R_X86_64_JUMP_SLOT  gtk_window_set_skip_pager_hint
 000000000060d178 R_X86_64_JUMP_SLOT  gtk_container_get_type
 000000000060d180 R_X86_64_JUMP_SLOT  gtk_main_iteration_do
 000000000060d188 R_X86_64_JUMP_SLOT  free
 000000000060d190 R_X86_64_JUMP_SLOT  strlen
 000000000060d198 R_X86_64_JUMP_SLOT  gtk_fixed_new
 000000000060d1a0 R_X86_64_JUMP_SLOT  gtk_events_pending
 000000000060d1a8 R_X86_64_JUMP_SLOT  gtk_window_set_title
 000000000060d1b0 R_X86_64_JUMP_SLOT  gtk_window_set_default_size
 000000000060d1b8 R_X86_64_JUMP_SLOT  sprintf
 000000000060d1c0 R_X86_64_JUMP_SLOT  gtk_label_get_text
 000000000060d1c8 R_X86_64_JUMP_SLOT  gtk_window_get_type
 000000000060d1d0 R_X86_64_JUMP_SLOT  g_object_set_data
 000000000060d1d8 R_X86_64_JUMP_SLOT  gtk_fixed_put
 000000000060d1e0 R_X86_64_JUMP_SLOT  gtk_window_set_position
 000000000060d1e8 R_X86_64_JUMP_SLOT  gtk_init
 000000000060d1f0 R_X86_64_JUMP_SLOT  gtk_window_set_accept_focus
 000000000060d1f8 R_X86_64_JUMP_SLOT  gtk_widget_realize
 000000000060d200 R_X86_64_JUMP_SLOT  gtk_window_add_accel_group
 000000000060d208 R_X86_64_JUMP_SLOT  gtk_label_get_type
 000000000060d210 R_X86_64_JUMP_SLOT  g_type_check_instance_is_a
 000000000060d218 R_X86_64_JUMP_SLOT  fread
 000000000060d220 R_X86_64_JUMP_SLOT  gtk_widget_set_size_request
 000000000060d228 R_X86_64_JUMP_SLOT  g_source_remove
 000000000060d230 R_X86_64_JUMP_SLOT  g_signal_connect_data
 000000000060d238 R_X86_64_JUMP_SLOT  gtk_window_set_resizable
 000000000060d240 R_X86_64_JUMP_SLOT  gdk_window_destroy
 000000000060d248 R_X86_64_JUMP_SLOT  pthread_mutexattr_settype
 000000000060d250 R_X86_64_JUMP_SLOT  g_type_check_instance_cast
 000000000060d258 R_X86_64_JUMP_SLOT  gtk_widget_show
 000000000060d260 R_X86_64_JUMP_SLOT  gdk_window_set_functions
 000000000060d268 R_X86_64_JUMP_SLOT  strcmp
 000000000060d270 R_X86_64_JUMP_SLOT  gtk_main_iteration
 000000000060d278 R_X86_64_JUMP_SLOT  gtk_frame_get_type
 000000000060d280 R_X86_64_JUMP_SLOT  strcpy
 000000000060d288 R_X86_64_JUMP_SLOT  gtk_container_add
 000000000060d290 R_X86_64_JUMP_SLOT  nanosleep
 000000000060d298 R_X86_64_JUMP_SLOT  gtk_event_box_new
 000000000060d2a0 R_X86_64_JUMP_SLOT  gtk_box_pack_start
 000000000060d2a8 R_X86_64_JUMP_SLOT  gtk_container_foreach
 000000000060d2b0 R_X86_64_JUMP_SLOT  pthread_once
 000000000060d2b8 R_X86_64_JUMP_SLOT  __ctype_tolower_loc
 000000000060d2c0 R_X86_64_JUMP_SLOT  gtk_misc_get_type
 000000000060d2c8 R_X86_64_JUMP_SLOT  gtk_widget_get_toplevel
 000000000060d2d0 R_X86_64_JUMP_SLOT  gtk_event_box_set_visible_window
 000000000060d2d8 R_X86_64_JUMP_SLOT  fclose
 000000000060d2e0 R_X86_64_JUMP_SLOT  gtk_widget_get_style
 000000000060d2e8 R_X86_64_JUMP_SLOT  gdk_rgb_init
 000000000060d2f0 R_X86_64_JUMP_SLOT  gdk_window_new
 000000000060d2f8 R_X86_64_JUMP_SLOT  gtk_window_iconify
 000000000060d300 R_X86_64_JUMP_SLOT  g_timeout_add
 000000000060d308 R_X86_64_JUMP_SLOT  pthread_mutex_lock
 000000000060d310 R_X86_64_JUMP_SLOT  realloc
 000000000060d318 R_X86_64_JUMP_SLOT  pthread_mutexattr_init
 000000000060d320 R_X86_64_JUMP_SLOT  pthread_key_create
 000000000060d328 R_X86_64_JUMP_SLOT  gtk_event_box_get_type
 000000000060d330 R_X86_64_JUMP_SLOT  pthread_mutex_destroy
 000000000060d338 R_X86_64_JUMP_SLOT  gtk_widget_set_uposition
 000000000060d340 R_X86_64_JUMP_SLOT  gtk_widget_add_events
 000000000060d348 R_X86_64_JUMP_SLOT  gtk_selection_data_free
 000000000060d350 R_X86_64_JUMP_SLOT  pthread_mutex_unlock
 000000000060d358 R_X86_64_JUMP_SLOT  gtk_window_set_transient_for
 000000000060d360 R_X86_64_JUMP_SLOT  gtk_widget_get_default_style
 000000000060d368 R_X86_64_JUMP_SLOT  gtk_misc_set_alignment
Мама ридна, заступница усих программистов!!!! Функции то из gtk и gdk реально используются!!!!
Итак, сторона обвинения считает доказанным, что гражданин trink врёт и не краснеет.
Господа присяжные заседатели, прошу вас вынести своё справедливое решение. 
