faq.rst 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
  1. :allow_comments: False
  2. .. meta::
  3. :keywords: FAQ
  4. .. _doc_faq:
  5. Frequently asked questions
  6. ==========================
  7. What can I do with Godot? How much does it cost? What are the license terms?
  8. ----------------------------------------------------------------------------
  9. Godot is `Free and open source Software <https://en.wikipedia.org/wiki/Free_and_open_source_software>`_
  10. available under the `OSI-approved <https://opensource.org/licenses/MIT>`_ MIT license. This means it is
  11. free as in "free speech" as well as in "free beer."
  12. In short:
  13. * You are free to download and use Godot for any purpose: personal, non-profit, commercial, or otherwise.
  14. * You are free to modify, distribute, redistribute, and remix Godot to your heart's content, for any reason,
  15. both non-commercially and commercially.
  16. All the contents of this accompanying documentation are published under the permissive Creative Commons
  17. Attribution 3.0 (`CC BY 3.0 <https://creativecommons.org/licenses/by/3.0/>`_) license, with attribution
  18. to "Juan Linietsky, Ariel Manzur and the Godot Engine community."
  19. Logos and icons are generally under the same Creative Commons license. Note
  20. that some third-party libraries included with Godot's source code may have
  21. different licenses.
  22. For full details, look at the `COPYRIGHT.txt <https://github.com/godotengine/godot/blob/master/COPYRIGHT.txt>`_
  23. as well as the `LICENSE.txt <https://github.com/godotengine/godot/blob/master/LICENSE.txt>`_
  24. and `LOGO_LICENSE.txt <https://github.com/godotengine/godot/blob/master/LOGO_LICENSE.txt>`_ files
  25. in the Godot repository.
  26. Also, see `the license page on the Godot website <https://godotengine.org/license>`_.
  27. Which platforms are supported by Godot?
  28. ---------------------------------------
  29. **For the editor:**
  30. * Windows
  31. * macOS
  32. * Linux, \*BSD
  33. * Android (experimental)
  34. * `Web <https://editor.godotengine.org/>`__ (experimental)
  35. **For exporting your games:**
  36. * Windows
  37. * macOS
  38. * Linux, \*BSD
  39. * Android
  40. * iOS
  41. * Web
  42. Both 32- and 64-bit binaries are supported where it makes sense, with 64
  43. being the default. Official macOS builds support Apple Silicon natively as well as x86_64.
  44. Some users also report building and using Godot successfully on ARM-based
  45. systems with Linux, like the Raspberry Pi.
  46. The Godot team can't provide an open source console export due to the licensing
  47. terms imposed by console manufacturers. Regardless of the engine you use,
  48. though, releasing games on consoles is always a lot of work. You can read more
  49. about :ref:`doc_consoles`.
  50. For more on this, see the sections on :ref:`exporting <toc-learn-workflow-export>`
  51. and :ref:`compiling Godot yourself <toc-devel-compiling>`.
  52. .. note::
  53. Godot 3 also had support for Universal Windows Platform (UWP). This platform
  54. port was removed in Godot 4 due to lack of maintenance, and it being
  55. deprecated by Microsoft. It is still available in the current stable release
  56. of Godot 3 for interested users.
  57. Which programming languages are supported in Godot?
  58. ---------------------------------------------------
  59. The officially supported languages for Godot are GDScript, C#, and C++.
  60. See the subcategories for each language in the :ref:`scripting <toc-learn-scripting>` section.
  61. If you are just starting out with either Godot or game development in general,
  62. GDScript is the recommended language to learn and use since it is native to Godot.
  63. While scripting languages tend to be less performant than lower-level languages in
  64. the long run, for prototyping, developing Minimum Viable Products (MVPs), and
  65. focusing on Time-To-Market (TTM), GDScript will provide a fast, friendly, and capable
  66. way of developing your games.
  67. Note that C# support is still relatively new, and as such, you may encounter
  68. some issues along the way. C# support is also currently missing on the web
  69. platform. Our friendly and hard-working development community is always
  70. ready to tackle new problems as they arise, but since this is an open source
  71. project, we recommend that you first do some due diligence yourself. Searching
  72. through discussions on
  73. `open issues <https://github.com/godotengine/godot/issues?q=is%3Aopen+is%3Aissue+label%3Atopic%3Adotnet>`__
  74. is a great way to start your troubleshooting.
  75. As for new languages, support is possible via third parties with GDExtensions. (See the question
  76. about plugins below). Work is currently underway, for example, on unofficial bindings for Godot
  77. to `Python <https://github.com/touilleMan/godot-python>`_ and `Nim <https://github.com/pragmagic/godot-nim>`_.
  78. .. _doc_faq_what_is_gdscript:
  79. What is GDScript and why should I use it?
  80. -----------------------------------------
  81. GDScript is Godot's integrated scripting language. It was built from the ground
  82. up to maximize Godot's potential in the least amount of code, affording both novice
  83. and expert developers alike to capitalize on Godot's strengths as fast as possible.
  84. If you've ever written anything in a language like Python before, then you'll feel
  85. right at home. For examples and a complete overview of the power GDScript offers
  86. you, check out the :ref:`GDScript scripting guide <doc_gdscript>`.
  87. There are several reasons to use GDScript, especially when you are prototyping, in
  88. alpha/beta stages of your project, or are not creating the next AAA title. The
  89. most salient reason is the overall **reduction of complexity**.
  90. The original intent of creating a tightly integrated, custom scripting language for
  91. Godot was two-fold: first, it reduces the amount of time necessary to get up and running
  92. with Godot, giving developers a rapid way of exposing themselves to the engine with a
  93. focus on productivity; second, it reduces the overall burden of maintenance, attenuates
  94. the dimensionality of issues, and allows the developers of the engine to focus on squashing
  95. bugs and improving features related to the engine core, rather than spending a lot of time
  96. trying to get a small set of incremental features working across a large set of languages.
  97. Since Godot is an open source project, it was imperative from the start to prioritize a
  98. more integrated and seamless experience over attracting additional users by supporting
  99. more familiar programming languages, especially when supporting those more familiar
  100. languages would result in a worse experience. We understand if you would rather use
  101. another language in Godot (see the list of supported options above). That being said, if
  102. you haven't given GDScript a try, try it for **three days**. Just like Godot,
  103. once you see how powerful it is and rapid your development becomes, we think GDScript
  104. will grow on you.
  105. More information about getting comfortable with GDScript or dynamically typed
  106. languages can be found in the :ref:`doc_gdscript_more_efficiently` tutorial.
  107. What were the motivations behind creating GDScript?
  108. ---------------------------------------------------
  109. In the early days, the engine used the `Lua <https://www.lua.org>`__ scripting
  110. language. Lua can be fast thanks to LuaJIT, but creating bindings to an object-oriented
  111. system (by using fallbacks) was complex and slow and took an enormous
  112. amount of code. After some experiments with `Python <https://www.python.org>`__,
  113. that also proved difficult to embed.
  114. The main reasons for creating a custom scripting language for Godot were:
  115. 1. Poor threading support in most script VMs, and Godot uses threads
  116. (Lua, Python, Squirrel, JavaScript, ActionScript, etc.).
  117. 2. Poor class-extending support in most script VMs, and adapting to
  118. the way Godot works is highly inefficient (Lua, Python, JavaScript).
  119. 3. Many existing languages have horrible interfaces for binding to C++, resulting in a
  120. large amount of code, bugs, bottlenecks, and general inefficiency (Lua, Python,
  121. Squirrel, JavaScript, etc.). We wanted to focus on a great engine, not a great number
  122. of integrations.
  123. 4. No native vector types (Vector3, Transform3D, etc.), resulting in highly
  124. reduced performance when using custom types (Lua, Python, Squirrel,
  125. JavaScript, ActionScript, etc.).
  126. 5. Garbage collector results in stalls or unnecessarily large memory
  127. usage (Lua, Python, JavaScript, ActionScript, etc.).
  128. 6. Difficulty integrating with the code editor for providing code
  129. completion, live editing, etc. (all of them).
  130. GDScript was designed to curtail the issues above, and more.
  131. What 3D model formats does Godot support?
  132. -----------------------------------------
  133. You can find detailed information on supported formats, how to export them from
  134. your 3D modeling software, and how to import them for Godot in the
  135. :ref:`doc_importing_3d_scenes` documentation.
  136. Will [insert closed SDK such as FMOD, GameWorks, etc.] be supported in Godot?
  137. -----------------------------------------------------------------------------
  138. The aim of Godot is to create a free and open source MIT-licensed engine that
  139. is modular and extendable. There are no plans for the core engine development
  140. community to support any third-party, closed-source/proprietary SDKs, as integrating
  141. with these would go against Godot's ethos.
  142. That said, because Godot is open source and modular, nothing prevents you or
  143. anyone else interested in adding those libraries as a module and shipping your
  144. game with them, as either open- or closed-source.
  145. To see how support for your SDK of choice could still be provided, look at the
  146. Plugins question below.
  147. If you know of a third-party SDK that is not supported by Godot but that offers
  148. free and open source integration, consider starting the integration work yourself.
  149. Godot is not owned by one person; it belongs to the community, and it grows along
  150. with ambitious community contributors like you.
  151. How can I extend Godot?
  152. -----------------------
  153. For extending Godot, like creating Godot Editor plugins or adding support
  154. for additional languages, take a look at :ref:`EditorPlugins <doc_making_plugins>`
  155. and tool scripts.
  156. Also, see the official blog post on GDExtension, a way to develop native extensions for Godot:
  157. * `Introducing GDNative's successor, GDExtension <https://godotengine.org/article/introducing-gd-extensions>`_
  158. You can also take a look at the GDScript implementation, the Godot modules,
  159. as well as the `Jolt physics engine integration <https://github.com/godot-jolt/godot-jolt>`__
  160. for Godot. This would be a good starting point to see how another
  161. third-party library integrates with Godot.
  162. How do I install the Godot editor on my system (for desktop integration)?
  163. -------------------------------------------------------------------------
  164. Since you don't need to actually install Godot on your system to run it,
  165. this means desktop integration is not performed automatically.
  166. There are two ways to overcome this. You can install Godot from
  167. `Steam <https://store.steampowered.com/app/404790/Godot_Engine/>`__ (all platforms),
  168. `Scoop <https://scoop.sh/>`__ (Windows), `Homebrew <https://brew.sh/>`__ (macOS)
  169. or `Flathub <https://flathub.org/apps/details/org.godotengine.Godot>`__ (Linux).
  170. This will automatically perform the required steps for desktop integration.
  171. Alternatively, you can manually perform the steps that an installer would do for you:
  172. Windows
  173. ^^^^^^^
  174. - Move the Godot executable to a stable location (i.e. outside of your Downloads folder),
  175. so you don't accidentally move it and break the shortcut in the future.
  176. - Right-click the Godot executable and choose **Create Shortcut**.
  177. - Move the created shortcut to ``%APPDATA%\Microsoft\Windows\Start Menu\Programs``.
  178. This is the user-wide location for shortcuts that will appear in the Start menu.
  179. You can also pin Godot in the task bar by right-clicking the executable and choosing
  180. **Pin to Task Bar**.
  181. macOS
  182. ^^^^^
  183. Drag the extracted Godot application to ``/Applications/Godot.app``, then drag it
  184. to the Dock if desired. Spotlight will be able to find Godot as long as it's in
  185. ``/Applications`` or ``~/Applications``.
  186. Linux
  187. ^^^^^
  188. - Move the Godot binary to a stable location (i.e. outside of your Downloads folder),
  189. so you don't accidentally move it and break the shortcut in the future.
  190. - Rename and move the Godot binary to a location present in your ``PATH`` environment variable.
  191. This is typically ``/usr/local/bin/godot`` or ``/usr/bin/godot``.
  192. Doing this requires administrator privileges,
  193. but this also allows you to
  194. :ref:`run the Godot editor from a terminal <doc_command_line_tutorial>` by entering ``godot``.
  195. - If you cannot move the Godot editor binary to a protected location, you can
  196. keep the binary somewhere in your home directory, and modify the ``Path=``
  197. line in the ``.desktop`` file linked below to contain the full *absolute* path
  198. to the Godot binary.
  199. - Save `this .desktop file <https://raw.githubusercontent.com/godotengine/godot/master/misc/dist/linux/org.godotengine.Godot.desktop>`__
  200. to ``$HOME/.local/share/applications/``. If you have administrator privileges,
  201. you can also save the ``.desktop`` file to ``/usr/local/share/applications``
  202. to make the shortcut available for all users.
  203. Is the Godot editor a portable application?
  204. -------------------------------------------
  205. In its default configuration, Godot is *semi-portable*. Its executable can run
  206. from any location (including non-writable locations) and never requires
  207. administrator privileges.
  208. However, configuration files will be written to the user-wide configuration or
  209. data directory. This is usually a good approach, but this means configuration files
  210. will not carry across machines if you copy the folder containing the Godot executable.
  211. See :ref:`doc_data_paths` for more information.
  212. If *true* portable operation is desired (e.g. for use on a USB stick),
  213. follow the steps in :ref:`doc_data_paths_self_contained_mode`.
  214. Why does Godot prioritize Vulkan and OpenGL over Direct3D?
  215. ----------------------------------------------------------
  216. Godot aims for cross-platform compatibility and open standards first and
  217. foremost. OpenGL and Vulkan are the technologies that are both open and
  218. available on (nearly) all platforms. Thanks to this design decision, a project
  219. developed with Godot on Windows will run out of the box on Linux, macOS, and
  220. more.
  221. While Vulkan and OpenGL remain our primary focus for their open standard and
  222. cross-platform benefits, Godot 4.3 introduced experimental support for Direct3D 12.
  223. This addition aims to enhance performance and compatibility on platforms where
  224. Direct3D 12 is prevalent, such as Windows and Xbox. However, Vulkan and OpenGL
  225. will continue as the default rendering backends on all platforms, including Windows.
  226. Why does Godot aim to keep its core feature set small?
  227. ------------------------------------------------------
  228. Godot intentionally does not include features that can be implemented by add-ons
  229. unless they are used very often. One example of something not used often is
  230. advanced artificial intelligence functionality.
  231. There are several reasons for this:
  232. - **Code maintenance and surface for bugs.** Every time we accept new code in
  233. the Godot repository, existing contributors often take the responsibility of
  234. maintaining it. Some contributors don't always stick around after getting
  235. their code merged, which can make it difficult for us to maintain the code in
  236. question. This can lead to poorly maintained features with bugs that are never
  237. fixed. On top of that, the "API surface" that needs to be tested and checked
  238. for regressions keeps increasing over time.
  239. - **Ease of contribution.** By keeping the codebase small and tidy, it can remain
  240. fast and easy to compile from source. This makes it easier for new
  241. contributors to get started with Godot, without requiring them to purchase
  242. high-end hardware.
  243. - **Keeping the binary size small for the editor.** Not everyone has a fast Internet
  244. connection. Ensuring that everyone can download the Godot editor, extract it
  245. and run it in less than 5 minutes makes Godot more accessible to developers in
  246. all countries.
  247. - **Keeping the binary size small for export templates.** This directly impacts the
  248. size of projects exported with Godot. On mobile and web platforms, keeping
  249. file sizes low is important to ensure fast installation and loading on
  250. underpowered devices. Again, there are many countries where high-speed
  251. Internet is not readily available. To add to this, strict data usage caps are
  252. often in effect in those countries.
  253. For all the reasons above, we have to be selective of what we can accept as core
  254. functionality in Godot. This is why we are aiming to move some core
  255. functionality to officially supported add-ons in future versions of Godot.
  256. In terms of binary size, this also has the advantage of making you pay only for
  257. what you actually use in your project. (In the meantime, you can
  258. :ref:`compile custom export templates with unused features disabled <doc_optimizing_for_size>`
  259. to optimize the distribution size of your project.)
  260. How should assets be created to handle multiple resolutions and aspect ratios?
  261. ------------------------------------------------------------------------------
  262. This question pops up often and it's probably thanks to the misunderstanding
  263. created by Apple when they originally doubled the resolution of their devices.
  264. It made people think that having the same assets in different resolutions was a
  265. good idea, so many continued towards that path. That originally worked to a
  266. point and only for Apple devices, but then several Android and Apple devices
  267. with different resolutions and aspect ratios were created, with a very wide
  268. range of sizes and DPIs.
  269. The most common and proper way to achieve this is to, instead, use a single base
  270. resolution for the game and only handle different screen aspect ratios. This is
  271. mostly needed for 2D, as in 3D, it's just a matter of camera vertical or
  272. horizontal FOV.
  273. 1. Choose a single base resolution for your game. Even if there are
  274. devices that go up to 1440p and devices that go down to 400p, regular
  275. hardware scaling in your device will take care of this at little or
  276. no performance cost. The most common choices are either near 1080p
  277. (1920x1080) or 720p (1280x720). Keep in mind the higher the
  278. resolution, the larger your assets, the more memory they will take
  279. and the longer the time it will take for loading.
  280. 2. Use the stretch options in Godot; canvas items stretching while keeping
  281. aspect ratios works best. Check the :ref:`doc_multiple_resolutions` tutorial
  282. on how to achieve this.
  283. 3. Determine a minimum resolution and then decide if you want your game
  284. to stretch vertically or horizontally for different aspect ratios, or
  285. if there is one aspect ratio and you want black bars to appear
  286. instead. This is also explained in :ref:`doc_multiple_resolutions`.
  287. 4. For user interfaces, use the :ref:`anchoring <doc_size_and_anchors>`
  288. to determine where controls should stay and move. If UIs are more
  289. complex, consider learning about Containers.
  290. And that's it! Your game should work in multiple resolutions.
  291. When is the next release of Godot out?
  292. --------------------------------------
  293. When it's ready! See :ref:`doc_release_policy_when_is_next_release_out` for more
  294. information.
  295. Which Godot version should I use for a new project?
  296. ---------------------------------------------------
  297. We recommend using Godot 4.x for new projects, but depending on the feature set
  298. you need, it may be better to use 3.x instead. See
  299. :ref:`doc_release_policy_which_version_should_i_use` for more information.
  300. Should I upgrade my project to use new Godot versions?
  301. ------------------------------------------------------
  302. Some new versions are safer to upgrade to than others. In general, whether you
  303. should upgrade depends on your project's circumstances. See
  304. :ref:`doc_release_policy_should_i_upgrade_my_project` for more information.
  305. I would like to contribute! How can I get started?
  306. --------------------------------------------------
  307. Awesome! As an open source project, Godot thrives off of the innovation and
  308. the ambition of developers like you.
  309. The best way to start contributing to Godot is by using it and reporting
  310. any `issues <https://github.com/godotengine/godot/issues>`_ that you might experience.
  311. A good bug report with clear reproduction steps helps your fellow contributors
  312. fix bugs quickly and efficiently. You can also report issues you find in the
  313. `online documentation <https://github.com/godotengine/godot-docs/issues>`_.
  314. If you feel ready to submit your first PR, pick any issue that resonates with you from
  315. one of the links above and try your hand at fixing it. You will need to learn how to
  316. compile the engine from sources, or how to build the documentation. You also need to
  317. get familiar with Git, a version control system that Godot developers use.
  318. We explain how to work with the engine source, how to edit the documentation, and
  319. what other ways to contribute are there in our :ref:`documentation for contributors <doc_ways_to_contribute>`.
  320. I have a great idea for Godot. How can I share it?
  321. --------------------------------------------------
  322. We are always looking for suggestions about how to improve the engine. User feedback
  323. is the main driving force behind our decision-making process, and limitations that
  324. you might face while working on your project are a great data point for us when considering
  325. engine enhancements.
  326. If you experience a usability problem or are missing a feature in the current version of
  327. Godot, start by discussing it with our `community <https://godotengine.org/community/>`_.
  328. There may be other, perhaps better, ways to achieve the desired result that community members
  329. could suggest. And you can learn if other users experience the same issue, and figure out
  330. a good solution together.
  331. If you come up with a well-defined idea for the engine, feel free to open a
  332. `proposal issue <https://github.com/godotengine/godot-proposals/issues>`_.
  333. Try to be specific and concrete while describing your problem and your proposed
  334. solution — only actionable proposals can be considered. It is not required, but
  335. if you want to implement it yourself, that's always appreciated!
  336. If you only have a general idea without specific details, you can open a
  337. `proposal discussion <https://github.com/godotengine/godot-proposals/discussions>`_.
  338. These can be anything you want, and allow for a free-form discussion in search of
  339. a solution. Once you find one, a proposal issue can be opened.
  340. Please, read the `readme <https://github.com/godotengine/godot-proposals/blob/master/README.md>`_
  341. document before creating a proposal to learn more about the process.
  342. .. _doc_faq_non_game_applications:
  343. Is it possible to use Godot to create non-game applications?
  344. ------------------------------------------------------------
  345. Yes! Godot features an extensive built-in UI system, and its small distribution
  346. size can make it a suitable alternative to frameworks like Electron or Qt.
  347. When creating a non-game application, make sure to enable
  348. :ref:`low-processor mode <class_ProjectSettings_property_application/run/low_processor_mode>`
  349. in the Project Settings to decrease CPU and GPU usage.
  350. Check out `Material Maker <https://github.com/RodZill4/material-maker>`__ and
  351. `Pixelorama <https://github.com/Orama-Interactive/Pixelorama>`__ for examples of
  352. open source applications made with Godot.
  353. .. _doc_faq_use_godot_as_library:
  354. Is it possible to use Godot as a library?
  355. -----------------------------------------
  356. Godot is meant to be used with its editor. We recommend you give it a try, as it
  357. will most likely save you time in the long term. There are no plans to make
  358. Godot usable as a library, as it would make the rest of the engine more
  359. convoluted and difficult to use for casual users.
  360. If you want to use a rendering library, look into using an established rendering
  361. engine instead. Keep in mind rendering engines usually have smaller communities
  362. compared to Godot. This will make it more difficult to find answers to your
  363. questions.
  364. What user interface toolkit does Godot use?
  365. -------------------------------------------
  366. Godot does not use a standard :abbr:`GUI (Graphical User Interface)` toolkit
  367. like GTK, Qt or wxWidgets. Instead, Godot uses its own user interface toolkit,
  368. rendered using OpenGL ES or Vulkan. This toolkit is exposed in the form of
  369. Control nodes, which are used to render the editor (which is written in C++).
  370. These Control nodes can also be used in projects from any scripting language
  371. supported by Godot.
  372. This custom toolkit makes it possible to benefit from hardware acceleration and
  373. have a consistent appearance across all platforms. On top of that, it doesn't
  374. have to deal with the LGPL licensing caveats that come with GTK or Qt. Lastly,
  375. this means Godot is "eating its own dog food" since the editor itself is one of
  376. the most complex users of Godot's UI system.
  377. This custom UI toolkit :ref:`can't be used as a library <doc_faq_use_godot_as_library>`,
  378. but you can still
  379. :ref:`use Godot to create non-game applications by using the editor <doc_faq_non_game_applications>`.
  380. .. _doc_faq_why_scons:
  381. Why does Godot use the SCons build system?
  382. ------------------------------------------
  383. Godot uses the `SCons <https://www.scons.org/>`__ build system. There are no
  384. plans to switch to a different build system in the near future. There are many
  385. reasons why we have chosen SCons over other alternatives. For example:
  386. - Godot can be compiled for a dozen different platforms: all PC
  387. platforms, all mobile platforms, many consoles, and WebAssembly.
  388. - Developers often need to compile for several of the platforms **at
  389. the same time**, or even different targets of the same platform. They
  390. can't afford reconfiguring and rebuilding the project each time.
  391. SCons can do this with no sweat, without breaking the builds.
  392. - SCons will *never* break a build no matter how many changes,
  393. configurations, additions, removals etc.
  394. - Godot's build process is not simple. Several files are generated by
  395. code (binders), others are parsed (shaders), and others need to offer
  396. customization (:ref:`modules <doc_custom_modules_in_cpp>`). This requires
  397. complex logic which is easier to write in an actual programming language (like Python)
  398. rather than using a mostly macro-based language only meant for building.
  399. - Godot's build process makes heavy use of cross-compiling tools. Each
  400. platform has a specific detection process, and all these must be
  401. handled as specific cases with special code written for each.
  402. Please try to keep an open mind and get at least a little familiar with SCons if
  403. you are planning to build Godot yourself.
  404. .. _doc_faq_why_not_stl:
  405. Why does Godot not use STL (Standard Template Library)?
  406. -------------------------------------------------------
  407. Like many other libraries (Qt as an example), Godot does not make use of STL
  408. (with a few exceptions such as threading primitives). We believe STL is a great
  409. general-purpose library, but we had special requirements for Godot.
  410. * STL templates create very large symbols, which results in huge debug binaries. We use few
  411. templates with very short names instead.
  412. * Most of our containers cater to special needs, like Vector, which uses copy on write and we
  413. use to pass data around, or the RID system, which requires O(1) access time for performance.
  414. Likewise, our hash map implementations are designed to integrate seamlessly with internal
  415. engine types.
  416. * Our containers have memory tracking built-in, which helps better track memory usage.
  417. * For large arrays, we use pooled memory, which can be mapped to either a preallocated buffer
  418. or virtual memory.
  419. * We use our custom String type, as the one provided by STL is too basic and lacks proper
  420. internationalization support.
  421. Why does Godot not use exceptions?
  422. ----------------------------------
  423. We believe games should not crash, no matter what. If an unexpected
  424. situation happens, Godot will print an error (which can be traced even to
  425. script), but then it will try to recover as gracefully as possible and keep
  426. going.
  427. Additionally, exceptions significantly increase the binary size for the
  428. executable and result in increased compile times.
  429. Does Godot use an ECS (Entity Component System)?
  430. ------------------------------------------------
  431. Godot does **not** use an ECS and relies on inheritance instead. While there
  432. is no universally better approach, we found that using an inheritance-based approach
  433. resulted in better usability while still being fast enough for most use cases.
  434. That said, nothing prevents you from making use of composition in your project
  435. by creating child Nodes with individual scripts. These nodes can then be added and
  436. removed at run-time to dynamically add and remove behaviors.
  437. More information about Godot's design choices can be found in
  438. `this article <https://godotengine.org/article/why-isnt-godot-ecs-based-game-engine>`__.
  439. Why does Godot not force users to implement DOD (Data-Oriented Design)?
  440. -----------------------------------------------------------------------
  441. While Godot internally attempts to use cache coherency as much as possible,
  442. we believe users don't need to be forced to use DOD practices.
  443. DOD is mostly a cache coherency optimization that can only provide
  444. significant performance improvements when dealing with dozens of
  445. thousands of objects which are processed every frame with little
  446. modification. That is, if you are moving a few hundred sprites or enemies
  447. per frame, DOD won't result in a meaningful improvement in performance. In
  448. such a case, you should consider a different approach to optimization.
  449. The vast majority of games do not need this and Godot provides handy helpers
  450. to do the job for most cases when you do.
  451. If a game needs to process such a large amount of objects, our recommendation
  452. is to use C++ and GDExtensions for performance-heavy tasks and GDScript (or C#)
  453. for the rest of the game.
  454. How can I support Godot development or contribute?
  455. --------------------------------------------------
  456. See :ref:`doc_ways_to_contribute`.
  457. Who is working on Godot? How can I contact you?
  458. -----------------------------------------------
  459. See the corresponding page on the `Godot website <https://godotengine.org/contact>`_.