====== Source Code ======

Synchronet is free open source software. You can get the current (or older) source (mostly in C) from the Synchronet [[dev:Git]] repository (using a Git client or a web browser) or you can download the most recently successfully built snapshot of the source code from [[bbs:Vertrauen]]:

===== Static Analysis =====

The Synchronet project is statically-analyzed for defects nightly (using a Linux-x64 build). See http://web.archive.org/web/20260329103933/https://scan.coverity.com/projects/synchronet for details.
===== Windows =====
Windows binaries are built targeting 32-bit x86 ("Win32") and are intended to be compatible with PCs (or VMs) running Microsoft Windows XP (SP3) and later. We use a combination of Microsoft Visual Studio/C++ (for the majority) and Borland (for a few GUI components) build/make systems.

  * Latest successfully built code ([[https://gitlab.synchro.net/main/sbbs/-/tree/dailybuild_win32|nightly branch]]): ''[[http://synchro.net/Synchronet/sbbs_src.zip|sbbs_src.zip]]''
  * Latest release (v3.19b) ''[[http://synchro.net/Synchronet/ssrc319b.zip|ssrc319b.zip]]''

===== UNIX =====
All non-Windows systems supported are UNIX-Like (e.g. Linux, FreeBSD) operating systems running on 32-bit or 64-bit Intel/AMD-compatible x86 processors and some 32-bit or 64-bit little-endian ARM processors. We use GNU Make as the build system though some included (and built-from-source) 3rd party libraries (e.g. cryptlib and libmozjs) might use more complicated build systems, e.g. requiring Perl or Python.

  * Latest successfully built code ([[https://gitlab.synchro.net/main/sbbs/-/tree/dailybuild_linux-x64|nightly branch]]): ''[[http://synchro.net/Synchronet/sbbs_src.tgz|sbbs_src.tgz]]''
  * Latest release (v3.20b) ''[[http://synchro.net/Synchronet/ssrc320b.tgz|ssrc320b.tgz]]''

===== Style ===== 
At this time, the Synchronet C/C++ source code consists of a variety of styles (i.e. naming, white-space, etc.). The most obvious distinction in style is that //older// code uses a more condensed/terse style (i.e. for maximum content in an 80x25 terminal) while //newer// or refactored code uses a more verbose/readable style. A project-wide source code beautification effort (using ''uncrustify'') is planned.

==== Tabs ====
The tab character (ASCII 9) is used for indentation and alignment in most files (e.g. ''*.c, *.cpp, *.h, *.js''), however the use of tabs for indentation and spaces for alignment is also acceptable. Using spaces for indentation is not acceptable.

Most Synchronet source files are created and edited using text editors configured for 4-space tab-stops. This tab preference is reflected in the "@format.tab-size 4" and "@format.use-tabs true" blurb in each file's header-comment block as well as the ''[[http://editorconfig.org|.editorconfig]]'' file found in the Synchronet ''src'' and ''[[dir:exec]]'' directories. If you use a text viewer or editor that supports the ''.editorconfig'' file or [[http://synchro.net/ptsc_hdr.html|PT/SC (@format...) headers]], the Synchronet source files should display and edit as intended, automatically.

=== Vim ===
If you use the [[https://www.vim.org/|Vim]] text editor, consider installing [[https://www.vim.org/scripts/script.php?script_id=4122|this plugin]] to enable support for the PT/SC headers found in Synchronet source files, to automatically set the tab-stops accordingly when editing Synchronet source files.

  curl --create-dirs 'https://www.vim.org/scripts/download_script.php?src_id=18234' -o ~/.vim/plugin/ptsc-header.vim

==== C99 ====
Most of the C/C++ source code is built using only compilers support C99 and newer standards, however some libraries (e.g. ''xpdev''), are still built using older (Borland) C compilers that do not support the full C99 standard. For those Synchronet libraries, care must be taken to *not* use newer C language constructs and standard library functions/types.

===== Run-time files =====

While technically not source code, if you have not already //installed// Synchronet, you will also need the run-time files (the ''.zip'' file contains files with Windows style line endings, while the ''.tgz'' contains files with Unix style line endings):

  * ''sbbs_run.tgz'' [[ftp://vert.synchro.net/Synchronet/sbbs_run.tgz|ftp]] [[http://synchro.net/Synchronet/sbbs_run.tgz|http]]
  * ''sbbs_run.zip'' [[ftp://vert.synchro.net/Synchronet/sbbs_run.zip|ftp]] [[http://synchro.net/Synchronet/sbbs_run.zip|http]]


===== Copyright ===== 

Synchronet BBS Software Version 3 is Copyright by Rob Swindell. Synchronet is comprised of several documentation, library, executable, and source code files, all of which are covered by version 2 of the GNU General Public License (GPLv2) with the exception of the following portions covered by the GNU Lesser General Public License (LGPL): XPDEV, SMBLIB, CIOLIB, UIFC, and XSDK.

What this means is that Synchronet Version 3 is free software in the sense that it is free of price and that you have the freedom to use, modify, and re-distribute the software, provided you pass these rights on to users of modified and/or re-distributed versions of the software (LGPL'ed portions exempted). Synchronet Version 3 also falls under the definition of Open Source software.

Synchronet Version 2 (for DOS and OS/2) and its source code was released to the Public Domain by Digital Dynamics in 1997 and remains Public Domain software today. Synchronet Version 3 is not Public Domain software.

===== See Also =====

  * [[Dependencies]]
  * [[tools|Build Tools]] 
  * [[history:development|Development History]]
  * [[dev:|Development Index]]
  * [[:install:nix|UNIX Installation]]
  
 
 
