Register
Login
Resources
Docs Blog Datasets Glossary Case Studies Tutorials & Webinars
Product
Data Engine LLMs Platform Enterprise
Pricing Explore
Connect to our Discord channel

Unversioned_shared_objects.txt 3.5 KB

You have to be logged in to leave a comment. Sign In
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
  1. = Unversioned Dynamic Shared Objects
  2. The standard policy
  3. is to have versioned SONAMES
  4. for all dynamic shared objects (DSO).
  5. Packagers ``SHOULD`` work with upstreams
  6. that do not have versioned SONAMES
  7. to enable this capability.
  8. This is a hard requirement
  9. if the DSO is being linked
  10. between different software.
  11. This policy
  12. helps to ensure ABI compatibility
  13. when DSOs are dynamically linked
  14. between different software.
  15. == When Are Unversioned Dynamic Shared Objects Acceptable
  16. There are a few conditions
  17. that need to exist in which DSOs are allowed to remain unversioned.
  18. * The DSO ``MUST NOT`` be visible
  19. to the dynamic linker
  20. (i.e. the DSO does not show up in ``ldconfig -p`` output)
  21. * The DSO ``MUST`` be located in a private directory
  22. (i.e. not located directly in /usr/lib[64] or in another directory listed as a library path for the linker)
  23. * The DSO ``MUST NOT`` be linked against and is loaded at runtime
  24. by the implementing application
  25. (i.e. ``dlopen()``)
  26. If these conditions are met,
  27. the unversioned DSOs
  28. do not need to be placed in a -devel package.
  29. == Implementation Details
  30. Listed below is information
  31. for each known use-case for unversioned DSOs.
  32. Evaluate if your situation matches any of these
  33. and ask for any clarification
  34. by opening a ticket with the {packaging-committee}.
  35. === Vulkan
  36. The https://vulkan.org[Vulkan] ecosystem
  37. continues to grow in capabilities and adoption.
  38. One of the core concepts
  39. is the https://docs.vulkan.org/guide/latest/loader.html[Vulkan Loader].
  40. This component is responsible for initializing the stack
  41. and includes loading unversioned DSOs,
  42. called Drivers and Layers.
  43. Vulkan Drivers need to be visible to the default loader
  44. and are a special exception.
  45. Drivers have the following requirements:
  46. * The DSO ``SHOULD`` be located in a private directory in /usr/lib[64]
  47. (i.e. ``%{_libdir}/%{name}/driver``)
  48. * The directory ``SHOULD`` be added to the loader path using a ``ld.conf.d`` configuration
  49. (i.e. ``%{_sysconfdir}/ld.conf.d/%{name}.conf`` definition)
  50. Vulkan Layers are loaded by configuration as defined by the Vulkan Loader specification.
  51. Layers have the following requirements:
  52. * The DSO ``MUST`` be located in a private directory in /usr/lib[64]
  53. (i.e. ``%{_libdir}/%{name}/layer``)
  54. and loaded by configuration
  55. === OpenXR
  56. The https://www.khronos.org/openxr/[OpenXR] ecosystem
  57. enables users to run XR applications built against the SDK.
  58. One of the core concepts
  59. is the https://registry.khronos.org/OpenXR/specs/1.1/loader.html[OpenXR Loader].
  60. This component is responsible for initializing the stack
  61. and includes loading unversioned DSOs,
  62. called Runtimes and Layers.
  63. OpenXR Runtimes are loaded by configuration as defined by the OpenXR Loader specification.
  64. Runtimes have the following requirements:
  65. * The DSO ``MUST`` be located in a private directory in /usr/lib[64]
  66. (i.e. ``%{_libdir}/%{name}/runtime``)
  67. * The directory ``SHOULD`` be added to the loader path using a ``ld.conf.d`` configuration
  68. (i.e. ``%{_sysconfdir}/ld.conf.d/%{name}.conf``definition)
  69. OpenXR Layers are loaded by configuration as defined by the OpenXR Loader specification.
  70. Layers have the following requirements:
  71. * The DSO ``MUST`` be located in a private directory in /usr/lib[64]
  72. (i.e. ``%{_libdir}/%{name}/layer``)
  73. and loaded by configuration
  74. === Other Cases
  75. An example of another case
  76. is an unversioned DSO
  77. that is loaded at runtime
  78. within the same application.
  79. This allows an application
  80. to load an optional feature, ship modular capabilities,
  81. or otherwise ``dlopen()`` it's own capabilities.
  82. These are allowed as long as the main requirements are met.
Tip!

Press p or to see the previous file or, n or to see the next file

Comments

Loading...