omnizip 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (511) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +32 -0
  4. data/.rubocop_todo.yml +754 -0
  5. data/COPYING +502 -0
  6. data/Gemfile +17 -0
  7. data/LICENSE +12 -0
  8. data/README.adoc +1045 -0
  9. data/Rakefile +12 -0
  10. data/benchmark/README.md +260 -0
  11. data/benchmark/benchmark_suite.rb +125 -0
  12. data/benchmark/compression_bench.rb +181 -0
  13. data/benchmark/filter_bench.rb +180 -0
  14. data/benchmark/models/benchmark_result.rb +59 -0
  15. data/benchmark/models/comparison_result.rb +69 -0
  16. data/benchmark/profile_suite.rb +167 -0
  17. data/benchmark/reporter.rb +150 -0
  18. data/benchmark/run_benchmarks.rb +66 -0
  19. data/benchmark/test_data.rb +137 -0
  20. data/config/formats/rar3_spec.yml +91 -0
  21. data/config/formats/rar5_spec.yml +102 -0
  22. data/docs/.github/workflows/docs.yml +142 -0
  23. data/docs/.gitignore +21 -0
  24. data/docs/.lychee.toml +67 -0
  25. data/docs/Gemfile +13 -0
  26. data/docs/RAR_WRITE_SUPPORT.md +26 -0
  27. data/docs/README.md +101 -0
  28. data/docs/_config.yml +112 -0
  29. data/docs/assets/logo.svg +1 -0
  30. data/docs/assets/omnizip-logo.pdf +1540 -11
  31. data/docs/comparison/feature-matrix.adoc +694 -0
  32. data/docs/comparison/index.adoc +113 -0
  33. data/docs/comparison/vs-7zip.adoc +309 -0
  34. data/docs/comparison/vs-peazip.adoc +77 -0
  35. data/docs/comparison/vs-rubyzip.adoc +342 -0
  36. data/docs/comparison/vs-winrar.adoc +100 -0
  37. data/docs/compatibility.adoc +579 -0
  38. data/docs/concepts/index.adoc +129 -0
  39. data/docs/developer/architecture.adoc +256 -0
  40. data/docs/developer/contributing.adoc +158 -0
  41. data/docs/developer/index.adoc +25 -0
  42. data/docs/developer/testing.adoc +212 -0
  43. data/docs/getting-started/basic-usage.adoc +271 -0
  44. data/docs/getting-started/index.adoc +42 -0
  45. data/docs/getting-started/installation.adoc +138 -0
  46. data/docs/getting-started/quick-start.adoc +185 -0
  47. data/docs/getting-started/your-first-archive.adoc +218 -0
  48. data/docs/guides/advanced-features/encryption.adoc +300 -0
  49. data/docs/guides/advanced-features/index.adoc +49 -0
  50. data/docs/guides/advanced-features/parallel-processing.adoc +246 -0
  51. data/docs/guides/advanced-features/progress-tracking.adoc +320 -0
  52. data/docs/guides/advanced-features/streaming.adoc +212 -0
  53. data/docs/guides/archive-formats/gzip-format.adoc +107 -0
  54. data/docs/guides/archive-formats/index.adoc +130 -0
  55. data/docs/guides/archive-formats/rar-format.adoc +104 -0
  56. data/docs/guides/archive-formats/rar5.adoc +521 -0
  57. data/docs/guides/archive-formats/seven-zip-format.adoc +35 -0
  58. data/docs/guides/archive-formats/tar-format.adoc +106 -0
  59. data/docs/guides/archive-formats/xz-format.adoc +118 -0
  60. data/docs/guides/archive-formats/zip-format.adoc +35 -0
  61. data/docs/guides/compression-algorithms/bzip2.adoc +113 -0
  62. data/docs/guides/compression-algorithms/deflate.adoc +319 -0
  63. data/docs/guides/compression-algorithms/index.adoc +190 -0
  64. data/docs/guides/compression-algorithms/lzma.adoc +398 -0
  65. data/docs/guides/compression-algorithms/lzma2.adoc +327 -0
  66. data/docs/guides/compression-algorithms/ppmd.adoc +316 -0
  67. data/docs/guides/compression-algorithms/zstandard.adoc +361 -0
  68. data/docs/guides/creating-archives.adoc +354 -0
  69. data/docs/guides/extracting-archives.adoc +53 -0
  70. data/docs/guides/format-conversion.adoc +64 -0
  71. data/docs/guides/index.adoc +49 -0
  72. data/docs/guides/migration-rubyzip.adoc +217 -0
  73. data/docs/guides/parity-archives.adoc +605 -0
  74. data/docs/guides/performance-tuning.adoc +88 -0
  75. data/docs/index.adoc +218 -0
  76. data/docs/lychee.toml +67 -0
  77. data/docs/reference/api/overview.adoc +188 -0
  78. data/docs/reference/cli/compress-command.adoc +114 -0
  79. data/docs/reference/cli/overview.adoc +140 -0
  80. data/docs/reference/index.adoc +26 -0
  81. data/docs/resources/faq.adoc +185 -0
  82. data/docs/resources/quick-reference.adoc +222 -0
  83. data/docs/troubleshooting/index.adoc +208 -0
  84. data/examples/api_comparison.rb +205 -0
  85. data/examples/deflate64_example.rb +96 -0
  86. data/examples/par2_demo.rb +121 -0
  87. data/examples/quick_start_native.rb +150 -0
  88. data/examples/quick_start_rubyzip.rb +115 -0
  89. data/examples/rubyzip_compatibility_demo.rb +194 -0
  90. data/exe/omnizip +27 -0
  91. data/lib/omnizip/algorithm.rb +130 -0
  92. data/lib/omnizip/algorithm_registry.rb +86 -0
  93. data/lib/omnizip/algorithms/.keep +0 -0
  94. data/lib/omnizip/algorithms/bzip2/bwt.rb +225 -0
  95. data/lib/omnizip/algorithms/bzip2/decoder.rb +193 -0
  96. data/lib/omnizip/algorithms/bzip2/encoder.rb +237 -0
  97. data/lib/omnizip/algorithms/bzip2/huffman.rb +206 -0
  98. data/lib/omnizip/algorithms/bzip2/mtf.rb +101 -0
  99. data/lib/omnizip/algorithms/bzip2/rle.rb +151 -0
  100. data/lib/omnizip/algorithms/bzip2.rb +130 -0
  101. data/lib/omnizip/algorithms/deflate/constants.rb +28 -0
  102. data/lib/omnizip/algorithms/deflate/decoder.rb +38 -0
  103. data/lib/omnizip/algorithms/deflate/encoder.rb +46 -0
  104. data/lib/omnizip/algorithms/deflate.rb +128 -0
  105. data/lib/omnizip/algorithms/deflate64/constants.rb +45 -0
  106. data/lib/omnizip/algorithms/deflate64/decoder.rb +153 -0
  107. data/lib/omnizip/algorithms/deflate64/encoder.rb +98 -0
  108. data/lib/omnizip/algorithms/deflate64/huffman_coder.rb +354 -0
  109. data/lib/omnizip/algorithms/deflate64/lz77_encoder.rb +142 -0
  110. data/lib/omnizip/algorithms/deflate64.rb +109 -0
  111. data/lib/omnizip/algorithms/lzma/bit_model.rb +120 -0
  112. data/lib/omnizip/algorithms/lzma/constants.rb +112 -0
  113. data/lib/omnizip/algorithms/lzma/decoder.rb +148 -0
  114. data/lib/omnizip/algorithms/lzma/dictionary.rb +69 -0
  115. data/lib/omnizip/algorithms/lzma/distance_coder.rb +415 -0
  116. data/lib/omnizip/algorithms/lzma/encoder.rb +142 -0
  117. data/lib/omnizip/algorithms/lzma/length_coder.rb +260 -0
  118. data/lib/omnizip/algorithms/lzma/literal_decoder.rb +320 -0
  119. data/lib/omnizip/algorithms/lzma/literal_encoder.rb +210 -0
  120. data/lib/omnizip/algorithms/lzma/lzip_decoder.rb +341 -0
  121. data/lib/omnizip/algorithms/lzma/lzma_alone_decoder.rb +192 -0
  122. data/lib/omnizip/algorithms/lzma/lzma_state.rb +128 -0
  123. data/lib/omnizip/algorithms/lzma/match.rb +32 -0
  124. data/lib/omnizip/algorithms/lzma/match_finder.rb +205 -0
  125. data/lib/omnizip/algorithms/lzma/match_finder_config.rb +142 -0
  126. data/lib/omnizip/algorithms/lzma/match_finder_factory.rb +88 -0
  127. data/lib/omnizip/algorithms/lzma/optimal_encoder.rb +130 -0
  128. data/lib/omnizip/algorithms/lzma/probability_models.rb +72 -0
  129. data/lib/omnizip/algorithms/lzma/range_coder.rb +85 -0
  130. data/lib/omnizip/algorithms/lzma/range_decoder.rb +434 -0
  131. data/lib/omnizip/algorithms/lzma/range_encoder.rb +194 -0
  132. data/lib/omnizip/algorithms/lzma/state.rb +127 -0
  133. data/lib/omnizip/algorithms/lzma/xz_buffered_range_encoder.rb +325 -0
  134. data/lib/omnizip/algorithms/lzma/xz_encoder.rb +426 -0
  135. data/lib/omnizip/algorithms/lzma/xz_encoder_fast.rb +645 -0
  136. data/lib/omnizip/algorithms/lzma/xz_match_finder_adapter.rb +227 -0
  137. data/lib/omnizip/algorithms/lzma/xz_price_calculator.rb +169 -0
  138. data/lib/omnizip/algorithms/lzma/xz_probability_models.rb +261 -0
  139. data/lib/omnizip/algorithms/lzma/xz_range_encoder.rb +223 -0
  140. data/lib/omnizip/algorithms/lzma/xz_range_encoder_exact.rb +331 -0
  141. data/lib/omnizip/algorithms/lzma/xz_state.rb +116 -0
  142. data/lib/omnizip/algorithms/lzma/xz_utils_decoder.rb +2055 -0
  143. data/lib/omnizip/algorithms/lzma.rb +238 -0
  144. data/lib/omnizip/algorithms/lzma2/chunk_manager.rb +182 -0
  145. data/lib/omnizip/algorithms/lzma2/constants.rb +41 -0
  146. data/lib/omnizip/algorithms/lzma2/encoder.rb +147 -0
  147. data/lib/omnizip/algorithms/lzma2/lzma2_chunk.rb +161 -0
  148. data/lib/omnizip/algorithms/lzma2/properties.rb +179 -0
  149. data/lib/omnizip/algorithms/lzma2/simple_lzma2_encoder.rb +127 -0
  150. data/lib/omnizip/algorithms/lzma2/xz_encoder_adapter.rb +85 -0
  151. data/lib/omnizip/algorithms/lzma2.rb +141 -0
  152. data/lib/omnizip/algorithms/ppmd7/constants.rb +74 -0
  153. data/lib/omnizip/algorithms/ppmd7/context.rb +154 -0
  154. data/lib/omnizip/algorithms/ppmd7/decoder.rb +126 -0
  155. data/lib/omnizip/algorithms/ppmd7/encoder.rb +163 -0
  156. data/lib/omnizip/algorithms/ppmd7/model.rb +248 -0
  157. data/lib/omnizip/algorithms/ppmd7/symbol_state.rb +57 -0
  158. data/lib/omnizip/algorithms/ppmd7.rb +116 -0
  159. data/lib/omnizip/algorithms/ppmd8/constants.rb +61 -0
  160. data/lib/omnizip/algorithms/ppmd8/context.rb +34 -0
  161. data/lib/omnizip/algorithms/ppmd8/decoder.rb +107 -0
  162. data/lib/omnizip/algorithms/ppmd8/encoder.rb +138 -0
  163. data/lib/omnizip/algorithms/ppmd8/model.rb +250 -0
  164. data/lib/omnizip/algorithms/ppmd8/restoration_method.rb +78 -0
  165. data/lib/omnizip/algorithms/ppmd8.rb +82 -0
  166. data/lib/omnizip/algorithms/ppmd_base.rb +138 -0
  167. data/lib/omnizip/algorithms/sevenzip_lzma2.rb +123 -0
  168. data/lib/omnizip/algorithms/xz_lzma2.rb +118 -0
  169. data/lib/omnizip/algorithms/zstandard/constants.rb +25 -0
  170. data/lib/omnizip/algorithms/zstandard/decoder.rb +46 -0
  171. data/lib/omnizip/algorithms/zstandard/encoder.rb +51 -0
  172. data/lib/omnizip/algorithms/zstandard.rb +138 -0
  173. data/lib/omnizip/buffer/memory_archive.rb +251 -0
  174. data/lib/omnizip/buffer/memory_extractor.rb +224 -0
  175. data/lib/omnizip/buffer.rb +176 -0
  176. data/lib/omnizip/checksum_registry.rb +114 -0
  177. data/lib/omnizip/checksums/crc32.rb +100 -0
  178. data/lib/omnizip/checksums/crc64.rb +101 -0
  179. data/lib/omnizip/checksums/crc_base.rb +158 -0
  180. data/lib/omnizip/checksums/verifier.rb +131 -0
  181. data/lib/omnizip/chunked/memory_manager.rb +194 -0
  182. data/lib/omnizip/chunked/reader.rb +78 -0
  183. data/lib/omnizip/chunked/writer.rb +120 -0
  184. data/lib/omnizip/chunked.rb +129 -0
  185. data/lib/omnizip/cli/output_formatter.rb +104 -0
  186. data/lib/omnizip/cli.rb +572 -0
  187. data/lib/omnizip/commands/.keep +0 -0
  188. data/lib/omnizip/commands/archive_create_command.rb +427 -0
  189. data/lib/omnizip/commands/archive_extract_command.rb +272 -0
  190. data/lib/omnizip/commands/archive_list_command.rb +218 -0
  191. data/lib/omnizip/commands/archive_repair_command.rb +131 -0
  192. data/lib/omnizip/commands/archive_verify_command.rb +117 -0
  193. data/lib/omnizip/commands/compress_command.rb +117 -0
  194. data/lib/omnizip/commands/decompress_command.rb +120 -0
  195. data/lib/omnizip/commands/list_command.rb +53 -0
  196. data/lib/omnizip/commands/metadata_command.rb +153 -0
  197. data/lib/omnizip/commands/parity_create_command.rb +122 -0
  198. data/lib/omnizip/commands/parity_repair_command.rb +122 -0
  199. data/lib/omnizip/commands/parity_verify_command.rb +124 -0
  200. data/lib/omnizip/commands/profile_list_command.rb +56 -0
  201. data/lib/omnizip/commands/profile_show_command.rb +44 -0
  202. data/lib/omnizip/convenience.rb +359 -0
  203. data/lib/omnizip/converter/conversion_registry.rb +49 -0
  204. data/lib/omnizip/converter/conversion_strategy.rb +121 -0
  205. data/lib/omnizip/converter/seven_zip_to_zip_strategy.rb +97 -0
  206. data/lib/omnizip/converter/zip_to_seven_zip_strategy.rb +112 -0
  207. data/lib/omnizip/converter.rb +105 -0
  208. data/lib/omnizip/crypto/aes256/cipher.rb +100 -0
  209. data/lib/omnizip/crypto/aes256/constants.rb +28 -0
  210. data/lib/omnizip/crypto/aes256/key_derivation.rb +101 -0
  211. data/lib/omnizip/crypto/aes256.rb +102 -0
  212. data/lib/omnizip/error.rb +106 -0
  213. data/lib/omnizip/eta/exponential_smoothing_estimator.rb +98 -0
  214. data/lib/omnizip/eta/moving_average_estimator.rb +99 -0
  215. data/lib/omnizip/eta/rate_calculator.rb +104 -0
  216. data/lib/omnizip/eta/sample_history.rb +143 -0
  217. data/lib/omnizip/eta/time_estimator.rb +106 -0
  218. data/lib/omnizip/eta.rb +63 -0
  219. data/lib/omnizip/extraction/filter_chain.rb +177 -0
  220. data/lib/omnizip/extraction/glob_pattern.rb +140 -0
  221. data/lib/omnizip/extraction/pattern_matcher.rb +70 -0
  222. data/lib/omnizip/extraction/predicate_pattern.rb +52 -0
  223. data/lib/omnizip/extraction/regex_pattern.rb +50 -0
  224. data/lib/omnizip/extraction/selective_extractor.rb +240 -0
  225. data/lib/omnizip/extraction.rb +111 -0
  226. data/lib/omnizip/file_type/mime_classifier.rb +144 -0
  227. data/lib/omnizip/file_type.rb +113 -0
  228. data/lib/omnizip/filter.rb +139 -0
  229. data/lib/omnizip/filter_pipeline.rb +108 -0
  230. data/lib/omnizip/filter_registry.rb +166 -0
  231. data/lib/omnizip/filters/bcj.rb +279 -0
  232. data/lib/omnizip/filters/bcj2/constants.rb +53 -0
  233. data/lib/omnizip/filters/bcj2/decoder.rb +200 -0
  234. data/lib/omnizip/filters/bcj2/encoder.rb +61 -0
  235. data/lib/omnizip/filters/bcj2/stream_data.rb +93 -0
  236. data/lib/omnizip/filters/bcj2.rb +99 -0
  237. data/lib/omnizip/filters/bcj_arm.rb +176 -0
  238. data/lib/omnizip/filters/bcj_arm64.rb +244 -0
  239. data/lib/omnizip/filters/bcj_ia64.rb +196 -0
  240. data/lib/omnizip/filters/bcj_ppc.rb +190 -0
  241. data/lib/omnizip/filters/bcj_sparc.rb +176 -0
  242. data/lib/omnizip/filters/bcj_x86.rb +193 -0
  243. data/lib/omnizip/filters/delta.rb +196 -0
  244. data/lib/omnizip/filters/filter_base.rb +72 -0
  245. data/lib/omnizip/filters/registry.rb +123 -0
  246. data/lib/omnizip/filters/xz_delta.rb +258 -0
  247. data/lib/omnizip/format_detector.rb +162 -0
  248. data/lib/omnizip/format_registry.rb +59 -0
  249. data/lib/omnizip/formats/.keep +0 -0
  250. data/lib/omnizip/formats/bzip2_file.rb +172 -0
  251. data/lib/omnizip/formats/cpio/constants.rb +55 -0
  252. data/lib/omnizip/formats/cpio/entry.rb +385 -0
  253. data/lib/omnizip/formats/cpio/reader.rb +196 -0
  254. data/lib/omnizip/formats/cpio/writer.rb +234 -0
  255. data/lib/omnizip/formats/cpio.rb +140 -0
  256. data/lib/omnizip/formats/format_spec_loader.rb +230 -0
  257. data/lib/omnizip/formats/gzip.rb +238 -0
  258. data/lib/omnizip/formats/iso/directory_builder.rb +297 -0
  259. data/lib/omnizip/formats/iso/directory_record.rb +152 -0
  260. data/lib/omnizip/formats/iso/joliet.rb +204 -0
  261. data/lib/omnizip/formats/iso/path_table.rb +125 -0
  262. data/lib/omnizip/formats/iso/reader.rb +197 -0
  263. data/lib/omnizip/formats/iso/rock_ridge.rb +349 -0
  264. data/lib/omnizip/formats/iso/volume_builder.rb +320 -0
  265. data/lib/omnizip/formats/iso/volume_descriptor.rb +168 -0
  266. data/lib/omnizip/formats/iso/writer.rb +530 -0
  267. data/lib/omnizip/formats/iso.rb +140 -0
  268. data/lib/omnizip/formats/lzip.rb +175 -0
  269. data/lib/omnizip/formats/lzma_alone.rb +171 -0
  270. data/lib/omnizip/formats/rar/archive_repairer.rb +243 -0
  271. data/lib/omnizip/formats/rar/archive_verifier.rb +195 -0
  272. data/lib/omnizip/formats/rar/block_parser.rb +243 -0
  273. data/lib/omnizip/formats/rar/compression/bit_stream.rb +180 -0
  274. data/lib/omnizip/formats/rar/compression/dispatcher.rb +217 -0
  275. data/lib/omnizip/formats/rar/compression/lz77_huffman/decoder.rb +216 -0
  276. data/lib/omnizip/formats/rar/compression/lz77_huffman/encoder.rb +158 -0
  277. data/lib/omnizip/formats/rar/compression/lz77_huffman/huffman_builder.rb +217 -0
  278. data/lib/omnizip/formats/rar/compression/lz77_huffman/huffman_coder.rb +189 -0
  279. data/lib/omnizip/formats/rar/compression/lz77_huffman/match_finder.rb +135 -0
  280. data/lib/omnizip/formats/rar/compression/lz77_huffman/sliding_window.rb +165 -0
  281. data/lib/omnizip/formats/rar/compression/ppmd/context.rb +105 -0
  282. data/lib/omnizip/formats/rar/compression/ppmd/decoder.rb +219 -0
  283. data/lib/omnizip/formats/rar/compression/ppmd/encoder.rb +262 -0
  284. data/lib/omnizip/formats/rar/compression_method_registry.rb +106 -0
  285. data/lib/omnizip/formats/rar/constants.rb +82 -0
  286. data/lib/omnizip/formats/rar/decompressor.rb +238 -0
  287. data/lib/omnizip/formats/rar/external_writer.rb +312 -0
  288. data/lib/omnizip/formats/rar/header.rb +192 -0
  289. data/lib/omnizip/formats/rar/license_validator.rb +109 -0
  290. data/lib/omnizip/formats/rar/models/rar_archive.rb +77 -0
  291. data/lib/omnizip/formats/rar/models/rar_entry.rb +65 -0
  292. data/lib/omnizip/formats/rar/models/rar_volume.rb +56 -0
  293. data/lib/omnizip/formats/rar/parity_handler.rb +292 -0
  294. data/lib/omnizip/formats/rar/rar5/compression/lzma.rb +202 -0
  295. data/lib/omnizip/formats/rar/rar5/compression/lzss.rb +578 -0
  296. data/lib/omnizip/formats/rar/rar5/compression/store.rb +60 -0
  297. data/lib/omnizip/formats/rar/rar5/crc32.rb +39 -0
  298. data/lib/omnizip/formats/rar/rar5/encryption/aes256_cbc.rb +97 -0
  299. data/lib/omnizip/formats/rar/rar5/encryption/encryption_header.rb +114 -0
  300. data/lib/omnizip/formats/rar/rar5/encryption/encryption_manager.rb +166 -0
  301. data/lib/omnizip/formats/rar/rar5/encryption/key_derivation.rb +97 -0
  302. data/lib/omnizip/formats/rar/rar5/header.rb +187 -0
  303. data/lib/omnizip/formats/rar/rar5/models/encryption_options.rb +74 -0
  304. data/lib/omnizip/formats/rar/rar5/models/recovery_options.rb +63 -0
  305. data/lib/omnizip/formats/rar/rar5/models/solid_options.rb +63 -0
  306. data/lib/omnizip/formats/rar/rar5/models/volume_options.rb +74 -0
  307. data/lib/omnizip/formats/rar/rar5/multi_volume/ARCHITECTURE.md +290 -0
  308. data/lib/omnizip/formats/rar/rar5/multi_volume/volume_manager.rb +264 -0
  309. data/lib/omnizip/formats/rar/rar5/multi_volume/volume_splitter.rb +155 -0
  310. data/lib/omnizip/formats/rar/rar5/multi_volume/volume_writer.rb +194 -0
  311. data/lib/omnizip/formats/rar/rar5/solid/solid_encoder.rb +109 -0
  312. data/lib/omnizip/formats/rar/rar5/solid/solid_manager.rb +142 -0
  313. data/lib/omnizip/formats/rar/rar5/solid/solid_stream.rb +121 -0
  314. data/lib/omnizip/formats/rar/rar5/vint.rb +65 -0
  315. data/lib/omnizip/formats/rar/rar5/writer.rb +466 -0
  316. data/lib/omnizip/formats/rar/rar_format_base.rb +241 -0
  317. data/lib/omnizip/formats/rar/reader.rb +366 -0
  318. data/lib/omnizip/formats/rar/recovery_record.rb +245 -0
  319. data/lib/omnizip/formats/rar/volume_manager.rb +168 -0
  320. data/lib/omnizip/formats/rar/writer.rb +431 -0
  321. data/lib/omnizip/formats/rar.rb +205 -0
  322. data/lib/omnizip/formats/rar3/compressor.rb +73 -0
  323. data/lib/omnizip/formats/rar3/decompressor.rb +66 -0
  324. data/lib/omnizip/formats/rar3/reader.rb +386 -0
  325. data/lib/omnizip/formats/rar3/writer.rb +219 -0
  326. data/lib/omnizip/formats/rar5/compressor.rb +73 -0
  327. data/lib/omnizip/formats/rar5/decompressor.rb +66 -0
  328. data/lib/omnizip/formats/rar5/reader.rb +342 -0
  329. data/lib/omnizip/formats/rar5/writer.rb +214 -0
  330. data/lib/omnizip/formats/seven_zip/coder_chain.rb +150 -0
  331. data/lib/omnizip/formats/seven_zip/constants.rb +126 -0
  332. data/lib/omnizip/formats/seven_zip/encoded_header.rb +114 -0
  333. data/lib/omnizip/formats/seven_zip/encrypted_header.rb +142 -0
  334. data/lib/omnizip/formats/seven_zip/file_collector.rb +144 -0
  335. data/lib/omnizip/formats/seven_zip/header.rb +106 -0
  336. data/lib/omnizip/formats/seven_zip/header_encryptor.rb +134 -0
  337. data/lib/omnizip/formats/seven_zip/header_writer.rb +466 -0
  338. data/lib/omnizip/formats/seven_zip/models/coder_info.rb +30 -0
  339. data/lib/omnizip/formats/seven_zip/models/file_entry.rb +58 -0
  340. data/lib/omnizip/formats/seven_zip/models/folder.rb +69 -0
  341. data/lib/omnizip/formats/seven_zip/models/stream_info.rb +42 -0
  342. data/lib/omnizip/formats/seven_zip/parser.rb +660 -0
  343. data/lib/omnizip/formats/seven_zip/reader.rb +458 -0
  344. data/lib/omnizip/formats/seven_zip/split_archive_reader.rb +632 -0
  345. data/lib/omnizip/formats/seven_zip/split_archive_writer.rb +315 -0
  346. data/lib/omnizip/formats/seven_zip/stream_compressor.rb +151 -0
  347. data/lib/omnizip/formats/seven_zip/stream_decompressor.rb +162 -0
  348. data/lib/omnizip/formats/seven_zip/writer.rb +740 -0
  349. data/lib/omnizip/formats/seven_zip.rb +93 -0
  350. data/lib/omnizip/formats/tar/constants.rb +73 -0
  351. data/lib/omnizip/formats/tar/entry.rb +94 -0
  352. data/lib/omnizip/formats/tar/header.rb +168 -0
  353. data/lib/omnizip/formats/tar/reader.rb +121 -0
  354. data/lib/omnizip/formats/tar/writer.rb +216 -0
  355. data/lib/omnizip/formats/tar.rb +84 -0
  356. data/lib/omnizip/formats/xz/reader.rb +116 -0
  357. data/lib/omnizip/formats/xz.rb +237 -0
  358. data/lib/omnizip/formats/xz_impl/block_decoder.rb +754 -0
  359. data/lib/omnizip/formats/xz_impl/block_encoder.rb +306 -0
  360. data/lib/omnizip/formats/xz_impl/block_header.rb +210 -0
  361. data/lib/omnizip/formats/xz_impl/block_header_parser.rb +186 -0
  362. data/lib/omnizip/formats/xz_impl/constants.rb +49 -0
  363. data/lib/omnizip/formats/xz_impl/index_decoder.rb +174 -0
  364. data/lib/omnizip/formats/xz_impl/index_encoder.rb +122 -0
  365. data/lib/omnizip/formats/xz_impl/stream_decoder.rb +468 -0
  366. data/lib/omnizip/formats/xz_impl/stream_encoder.rb +99 -0
  367. data/lib/omnizip/formats/xz_impl/stream_footer.rb +81 -0
  368. data/lib/omnizip/formats/xz_impl/stream_footer_parser.rb +117 -0
  369. data/lib/omnizip/formats/xz_impl/stream_header.rb +55 -0
  370. data/lib/omnizip/formats/xz_impl/stream_header_parser.rb +108 -0
  371. data/lib/omnizip/formats/xz_impl/vli.rb +128 -0
  372. data/lib/omnizip/formats/xz_impl/writer.rb +421 -0
  373. data/lib/omnizip/formats/zip/central_directory_header.rb +195 -0
  374. data/lib/omnizip/formats/zip/constants.rb +69 -0
  375. data/lib/omnizip/formats/zip/end_of_central_directory.rb +133 -0
  376. data/lib/omnizip/formats/zip/local_file_header.rb +138 -0
  377. data/lib/omnizip/formats/zip/reader.rb +250 -0
  378. data/lib/omnizip/formats/zip/unix_extra_field.rb +153 -0
  379. data/lib/omnizip/formats/zip/writer.rb +375 -0
  380. data/lib/omnizip/formats/zip/zip64_end_of_central_directory.rb +104 -0
  381. data/lib/omnizip/formats/zip/zip64_end_of_central_directory_locator.rb +66 -0
  382. data/lib/omnizip/formats/zip/zip64_extra_field.rb +114 -0
  383. data/lib/omnizip/formats/zip.rb +50 -0
  384. data/lib/omnizip/implementations/base/lzma2_decoder_base.rb +75 -0
  385. data/lib/omnizip/implementations/base/lzma2_encoder_base.rb +128 -0
  386. data/lib/omnizip/implementations/base/lzma_decoder_base.rb +83 -0
  387. data/lib/omnizip/implementations/base/lzma_encoder_base.rb +108 -0
  388. data/lib/omnizip/implementations/base/state_machine_base.rb +182 -0
  389. data/lib/omnizip/implementations/seven_zip/lzma/decoder.rb +421 -0
  390. data/lib/omnizip/implementations/seven_zip/lzma/encoder.rb +465 -0
  391. data/lib/omnizip/implementations/seven_zip/lzma/match_finder.rb +288 -0
  392. data/lib/omnizip/implementations/seven_zip/lzma/range_decoder.rb +200 -0
  393. data/lib/omnizip/implementations/seven_zip/lzma/range_encoder.rb +197 -0
  394. data/lib/omnizip/implementations/seven_zip/lzma/state_machine.rb +141 -0
  395. data/lib/omnizip/implementations/seven_zip/lzma2/encoder.rb +519 -0
  396. data/lib/omnizip/implementations/xz_utils/lzma2/decoder.rb +723 -0
  397. data/lib/omnizip/implementations/xz_utils/lzma2/encoder.rb +750 -0
  398. data/lib/omnizip/io/buffered_input.rb +146 -0
  399. data/lib/omnizip/io/buffered_output.rb +105 -0
  400. data/lib/omnizip/io/stream_manager.rb +115 -0
  401. data/lib/omnizip/link_handler/hard_link.rb +79 -0
  402. data/lib/omnizip/link_handler/symbolic_link.rb +74 -0
  403. data/lib/omnizip/link_handler.rb +124 -0
  404. data/lib/omnizip/metadata/archive_metadata.rb +114 -0
  405. data/lib/omnizip/metadata/entry_metadata.rb +146 -0
  406. data/lib/omnizip/metadata/metadata_editor.rb +171 -0
  407. data/lib/omnizip/metadata/metadata_registry.rb +64 -0
  408. data/lib/omnizip/metadata/metadata_validator.rb +99 -0
  409. data/lib/omnizip/metadata.rb +57 -0
  410. data/lib/omnizip/models/.keep +0 -0
  411. data/lib/omnizip/models/algorithm_metadata.rb +73 -0
  412. data/lib/omnizip/models/compression_options.rb +71 -0
  413. data/lib/omnizip/models/conversion_options.rb +87 -0
  414. data/lib/omnizip/models/conversion_result.rb +135 -0
  415. data/lib/omnizip/models/eta_result.rb +46 -0
  416. data/lib/omnizip/models/extraction_rule.rb +115 -0
  417. data/lib/omnizip/models/filter_chain.rb +144 -0
  418. data/lib/omnizip/models/filter_config.rb +183 -0
  419. data/lib/omnizip/models/match_result.rb +124 -0
  420. data/lib/omnizip/models/optimization_suggestion.rb +91 -0
  421. data/lib/omnizip/models/parallel_options.rb +104 -0
  422. data/lib/omnizip/models/performance_result.rb +79 -0
  423. data/lib/omnizip/models/profile_report.rb +82 -0
  424. data/lib/omnizip/models/progress_options.rb +38 -0
  425. data/lib/omnizip/models/split_options.rb +116 -0
  426. data/lib/omnizip/optimization_registry.rb +81 -0
  427. data/lib/omnizip/parallel/job_queue.rb +209 -0
  428. data/lib/omnizip/parallel/job_scheduler.rb +203 -0
  429. data/lib/omnizip/parallel/parallel_compressor.rb +347 -0
  430. data/lib/omnizip/parallel/parallel_extractor.rb +329 -0
  431. data/lib/omnizip/parallel/worker_pool.rb +223 -0
  432. data/lib/omnizip/parallel.rb +149 -0
  433. data/lib/omnizip/parity/chunked_block_processor.rb +196 -0
  434. data/lib/omnizip/parity/galois16.rb +145 -0
  435. data/lib/omnizip/parity/models/creator_packet.rb +73 -0
  436. data/lib/omnizip/parity/models/file_description_packet.rb +133 -0
  437. data/lib/omnizip/parity/models/ifsc_packet.rb +123 -0
  438. data/lib/omnizip/parity/models/main_packet.rb +128 -0
  439. data/lib/omnizip/parity/models/packet.rb +156 -0
  440. data/lib/omnizip/parity/models/packet_registry.rb +109 -0
  441. data/lib/omnizip/parity/models/recovery_slice_packet.rb +78 -0
  442. data/lib/omnizip/parity/par2_creator.rb +531 -0
  443. data/lib/omnizip/parity/par2_repairer.rb +407 -0
  444. data/lib/omnizip/parity/par2_verifier.rb +364 -0
  445. data/lib/omnizip/parity/par2cmdline_algorithm.rb +110 -0
  446. data/lib/omnizip/parity/par2cmdline_coefficients.rb +78 -0
  447. data/lib/omnizip/parity/reed_solomon_decoder.rb +266 -0
  448. data/lib/omnizip/parity/reed_solomon_encoder.rb +111 -0
  449. data/lib/omnizip/parity/reed_solomon_matrix.rb +342 -0
  450. data/lib/omnizip/parity.rb +186 -0
  451. data/lib/omnizip/password/encryption_registry.rb +65 -0
  452. data/lib/omnizip/password/encryption_strategy.rb +96 -0
  453. data/lib/omnizip/password/password_validator.rb +129 -0
  454. data/lib/omnizip/password/winzip_aes_strategy.rb +192 -0
  455. data/lib/omnizip/password/zip_crypto_strategy.rb +141 -0
  456. data/lib/omnizip/password.rb +87 -0
  457. data/lib/omnizip/pipe/stream_compressor.rb +124 -0
  458. data/lib/omnizip/pipe/stream_decompressor.rb +174 -0
  459. data/lib/omnizip/pipe.rb +121 -0
  460. data/lib/omnizip/platform/ntfs_streams.rb +201 -0
  461. data/lib/omnizip/platform.rb +189 -0
  462. data/lib/omnizip/profile/archive_profile.rb +39 -0
  463. data/lib/omnizip/profile/balanced_profile.rb +33 -0
  464. data/lib/omnizip/profile/binary_profile.rb +36 -0
  465. data/lib/omnizip/profile/compression_profile.rb +158 -0
  466. data/lib/omnizip/profile/custom_profile.rb +157 -0
  467. data/lib/omnizip/profile/fast_profile.rb +33 -0
  468. data/lib/omnizip/profile/maximum_profile.rb +33 -0
  469. data/lib/omnizip/profile/profile_detector.rb +110 -0
  470. data/lib/omnizip/profile/profile_registry.rb +161 -0
  471. data/lib/omnizip/profile/text_profile.rb +36 -0
  472. data/lib/omnizip/profile.rb +190 -0
  473. data/lib/omnizip/profiler/memory_profiler.rb +66 -0
  474. data/lib/omnizip/profiler/method_profiler.rb +49 -0
  475. data/lib/omnizip/profiler/report_generator.rb +169 -0
  476. data/lib/omnizip/profiler.rb +204 -0
  477. data/lib/omnizip/progress/callback_reporter.rb +36 -0
  478. data/lib/omnizip/progress/console_reporter.rb +62 -0
  479. data/lib/omnizip/progress/log_reporter.rb +91 -0
  480. data/lib/omnizip/progress/operation_progress.rb +118 -0
  481. data/lib/omnizip/progress/progress_bar.rb +156 -0
  482. data/lib/omnizip/progress/progress_reporter.rb +40 -0
  483. data/lib/omnizip/progress/progress_tracker.rb +190 -0
  484. data/lib/omnizip/progress/silent_reporter.rb +24 -0
  485. data/lib/omnizip/progress.rb +127 -0
  486. data/lib/omnizip/rubyzip_compat.rb +63 -0
  487. data/lib/omnizip/temp/safe_extract.rb +168 -0
  488. data/lib/omnizip/temp/temp_file.rb +124 -0
  489. data/lib/omnizip/temp/temp_file_pool.rb +109 -0
  490. data/lib/omnizip/temp.rb +181 -0
  491. data/lib/omnizip/version.rb +5 -0
  492. data/lib/omnizip/zip/entry.rb +156 -0
  493. data/lib/omnizip/zip/file.rb +485 -0
  494. data/lib/omnizip/zip/input_stream.rb +273 -0
  495. data/lib/omnizip/zip/output_stream.rb +324 -0
  496. data/lib/omnizip.rb +156 -0
  497. data/readme-docs/advanced-features.adoc +515 -0
  498. data/readme-docs/api-usage.adoc +444 -0
  499. data/readme-docs/architecture.adoc +449 -0
  500. data/readme-docs/archive-formats.adoc +479 -0
  501. data/readme-docs/cli-usage.adoc +222 -0
  502. data/readme-docs/compression-algorithms.adoc +442 -0
  503. data/readme-docs/compression-profiles.adoc +247 -0
  504. data/readme-docs/encryption-checksums.adoc +328 -0
  505. data/readme-docs/format-converter.adoc +325 -0
  506. data/readme-docs/installation.adoc +228 -0
  507. data/readme-docs/par2-archives.adoc +608 -0
  508. data/readme-docs/performance-profiler.adoc +389 -0
  509. data/readme-docs/preprocessing-filters.adoc +280 -0
  510. data/xz-file-format-1.2.1.txt +1174 -0
  511. metadata +617 -0
@@ -0,0 +1,579 @@
1
+ ---
2
+ title: Compatibility Matrix
3
+ nav_order: 10
4
+ ---
5
+
6
+ == Purpose
7
+
8
+ This page provides a comprehensive comparison of Omnizip with other archive utilities to help you make informed decisions about which tool to use for your needs.
9
+
10
+ == Quick Comparison
11
+
12
+ [cols="3,1,1,1,1,1,1,1"]
13
+ |===
14
+ |Feature |Omnizip |rubyzip |7-Zip |WinRAR |PeaZip |libarchive |Info-ZIP
15
+
16
+ |**Language**
17
+ |Pure Ruby
18
+ |Pure Ruby
19
+ |C++
20
+ |C++
21
+ |C++
22
+ |C
23
+ |C
24
+
25
+ |**Formats Supported**
26
+ |11
27
+ |1 (ZIP)
28
+ |20+
29
+ |30+
30
+ |200+
31
+ |30+
32
+ |1 (ZIP)
33
+
34
+ |**No Dependencies**
35
+ |✅
36
+ |✅
37
+ |❌
38
+ |❌
39
+ |❌
40
+ |❌
41
+ |❌
42
+
43
+ |**Cross-Platform**
44
+ |✅
45
+ |✅
46
+ |✅
47
+ |Windows
48
+ |✅
49
+ |✅
50
+ |✅
51
+
52
+ |**LZMA/LZMA2**
53
+ |✅
54
+ |❌
55
+ |✅
56
+ |✅
57
+ |✅
58
+ |✅
59
+ |❌
60
+
61
+ |**Advanced Algorithms**
62
+ |8 algorithms
63
+ |1 (Deflate)
64
+ |8+
65
+ |10+
66
+ |Varies
67
+ |Multiple
68
+ |1
69
+
70
+ |**AES Encryption**
71
+ |✅
72
+ |Partial
73
+ |✅
74
+ |✅
75
+ |✅
76
+ |✅
77
+ |❌
78
+
79
+ |**Streaming Support**
80
+ |✅
81
+ |✅
82
+ |Partial
83
+ |Partial
84
+ |❌
85
+ |✅
86
+ |Partial
87
+
88
+ |**Progress Tracking**
89
+ |✅
90
+ |❌
91
+ |✅
92
+ |✅
93
+ |✅
94
+ |❌
95
+ |❌
96
+
97
+ |**Parallel Processing**
98
+ |✅
99
+ |❌
100
+ |✅
101
+ |✅
102
+ |Partial
103
+ |❌
104
+ |❌
105
+
106
+ |**Ruby API**
107
+ |✅
108
+ |✅
109
+ |❌
110
+ |❌
111
+ |❌
112
+ |Bindings
113
+ |❌
114
+
115
+ |**Active Development**
116
+ |✅
117
+ |✅
118
+ |✅
119
+ |✅
120
+ |✅
121
+ |✅
122
+ |⚠️
123
+ |===
124
+
125
+ == Detailed Comparisons
126
+
127
+ === Omnizip vs Rubyzip
128
+
129
+ [cols="2,1,1,3"]
130
+ |===
131
+ |Feature |Omnizip |rubyzip |Notes
132
+
133
+ |**Archive Formats**
134
+ |ZIP, 7z, +9 more
135
+ |ZIP only
136
+ |Omnizip supports multiple formats
137
+
138
+ |**Compression Algorithms**
139
+ |8 algorithms
140
+ |1 (Deflate)
141
+ |LZMA2, PPMd, Zstandard, etc.
142
+
143
+ |**API Compatibility**
144
+ |100%
145
+ |Native
146
+ |Drop-in replacement possible
147
+
148
+ |**Encryption**
149
+ |AES-256, WinZip AES
150
+ |Traditional, AES (partial)
151
+ |Stronger encryption options
152
+
153
+ |**Performance**
154
+ |Similar
155
+ |Baseline
156
+ |Pure Ruby, comparable speed
157
+
158
+ |**Memory Usage**
159
+ |Configurable
160
+ |Standard
161
+ |Streaming reduces memory
162
+
163
+ |**Parallel Processing**
164
+ |✅
165
+ |❌
166
+ |2-3x speedup available
167
+
168
+ |**File Size Limits**
169
+ |Unlimited (ZIP64)
170
+ |ZIP64 supported
171
+ |Both handle large files
172
+ |===
173
+
174
+ **Migration Path**: Use `require 'omnizip/rubyzip_compat'` for seamless migration.
175
+
176
+ === Omnizip vs 7-Zip
177
+
178
+ [cols="2,1,1,3"]
179
+ |===
180
+ |Feature |Omnizip |7-Zip |Notes
181
+
182
+ |**Implementation**
183
+ |Pure Ruby
184
+ |Native C++
185
+ |Different performance characteristics
186
+
187
+ |**Compression Ratio**
188
+ |95%+ of 7-Zip
189
+ |Best-in-class
190
+ |Comparable results
191
+
192
+ |**Speed**
193
+ |10-60x slower
194
+ |Fastest
195
+ |Trade-off for portability
196
+
197
+ |**API Access**
198
+ |Ruby API
199
+ |CLI only
200
+ |Programmatic vs command-line
201
+
202
+ |**Memory Efficiency**
203
+ |Configurable
204
+ |Optimized
205
+ |Streaming available in both
206
+
207
+ |**Parallel Processing**
208
+ |2-3x speedup
209
+ |3-4x speedup
210
+ |Both support multi-core
211
+
212
+ |**Format Support**
213
+ |ZIP, 7z, +9
214
+ |20+ formats
215
+ |7-Zip supports more formats
216
+
217
+ |**Platform Support**
218
+ |All (Ruby)
219
+ |Cross-platform
220
+ |Both widely available
221
+ |===
222
+
223
+ **When to Choose Omnizip**: Need Ruby API, programmatic control, or rubyzip compatibility
224
+ **When to Choose 7-Zip**: Maximum speed, CLI tools, broader format support
225
+
226
+ === Omnizip vs WinRAR
227
+
228
+ [cols="2,1,1,3"]
229
+ |===
230
+ |Feature |Omnizip |WinRAR |Notes
231
+
232
+ |**RAR Format**
233
+ |Read-only
234
+ |Read/Write
235
+ |License restrictions on RAR creation
236
+
237
+ |**Compression**
238
+ |8 algorithms
239
+ |10+ algorithms
240
+ |Both offer advanced compression
241
+
242
+ |**Licensing**
243
+ |LGPL 2.1 (Free)
244
+ |Proprietary (Paid)
245
+ |Omnizip is free and open source
246
+
247
+ |**Platform**
248
+ |All platforms
249
+ |Primarily Windows
250
+ |Omnizip more portable
251
+
252
+ |**API**
253
+ |Full Ruby API
254
+ |Limited
255
+ |Better programmatic access
256
+
257
+ |**Recovery Records**
258
+ |Limited
259
+ |Excellent
260
+ |WinRAR stronger for recovery
261
+ |===
262
+
263
+ === Omnizip vs libarchive
264
+
265
+ [cols="2,1,1,3"]
266
+ |===
267
+ |Feature |Omnizip |libarchive |Notes
268
+
269
+ |**Language**
270
+ |Pure Ruby
271
+ |C library
272
+ |Different integration approaches
273
+
274
+ |**Format Support**
275
+ |11 formats
276
+ |30+ formats
277
+ |libarchive more comprehensive
278
+
279
+ |**Dependencies**
280
+ |None
281
+ |System library
282
+ |Omnizip easier to deploy
283
+
284
+ |**Performance**
285
+ |Good
286
+ |Excellent
287
+ |Native C is faster
288
+
289
+ |**API Quality**
290
+ |Ruby-native
291
+ |C API + bindings
292
+ |Omnizip more Ruby-friendly
293
+
294
+ |**Streaming**
295
+ |✅ Full
296
+ |✅ Full
297
+ |Both excel at streaming
298
+ |===
299
+
300
+ == Feature Matrix by Tool
301
+
302
+ === Compression Algorithms
303
+
304
+ [cols="2,1,1,1,1,1"]
305
+ |===
306
+ |Algorithm |Omnizip |rubyzip |7-Zip |WinRAR |libarchive
307
+
308
+ |Store (no compression)
309
+ |✅
310
+ |✅
311
+ |✅
312
+ |✅
313
+ |✅
314
+
315
+ |Deflate
316
+ |✅
317
+ |✅
318
+ |✅
319
+ |✅
320
+ |✅
321
+
322
+ |Deflate64
323
+ |✅
324
+ |❌
325
+ |✅
326
+ |✅
327
+ |❌
328
+
329
+ |LZMA
330
+ |✅
331
+ |❌
332
+ |✅
333
+ |✅
334
+ |✅
335
+
336
+ |LZMA2
337
+ |✅
338
+ |❌
339
+ |✅
340
+ |✅
341
+ |✅
342
+
343
+ |BZip2
344
+ |✅
345
+ |❌
346
+ |✅
347
+ |✅
348
+ |✅
349
+
350
+ |PPMd7/8
351
+ |✅
352
+ |❌
353
+ |✅
354
+ |✅
355
+ |❌
356
+
357
+ |Zstandard
358
+ |✅
359
+ |❌
360
+ |✅
361
+ |❌
362
+ |✅
363
+ |===
364
+
365
+ === Archive Formats
366
+
367
+ [cols="2,1,1,1,1,1"]
368
+ |===
369
+ |Format |Omnizip |rubyzip |7-Zip |WinRAR |libarchive
370
+
371
+ |ZIP
372
+ |✅ Full
373
+ |✅ Full
374
+ |✅ Full
375
+ |✅ Full
376
+ |✅ Full
377
+
378
+ |ZIP64
379
+ |✅
380
+ |✅
381
+ |✅
382
+ |✅
383
+ |✅
384
+
385
+ |7z
386
+ |✅ Full
387
+ |❌
388
+ |✅ Full
389
+ |✅ Full
390
+ |Partial
391
+
392
+ |RAR
393
+ |Read-only
394
+ |❌
395
+ |Read-only
396
+ |✅ Full
397
+ |Read-only
398
+
399
+ |TAR
400
+ |✅
401
+ |❌
402
+ |✅
403
+ |✅
404
+ |✅ Full
405
+
406
+ |GZIP
407
+ |✅
408
+ |❌
409
+ |✅
410
+ |✅
411
+ |✅
412
+
413
+ |BZIP2
414
+ |✅
415
+ |❌
416
+ |✅
417
+ |✅
418
+ |✅
419
+
420
+ |XZ
421
+ |✅
422
+ |❌
423
+ |✅
424
+ |✅
425
+ |✅
426
+
427
+ |ISO
428
+ |Read-only
429
+ |❌
430
+ |✅
431
+ |✅
432
+ |✅
433
+ |===
434
+
435
+ == Use Case Recommendations
436
+
437
+ === Choose Omnizip When:
438
+
439
+ ✅ You need a pure Ruby solution (no native extensions)
440
+ ✅ You want 7-Zip format support in Ruby
441
+ ✅ You're migrating from rubyzip and need better compression
442
+ ✅ You need both ZIP and 7z formats in one library
443
+ ✅ You want programmatic Ruby API with good documentation
444
+ ✅ You need streaming and in-memory operations
445
+ ✅ Cross-platform consistency is critical
446
+
447
+ === Choose Rubyzip When:
448
+
449
+ ✅ You only need ZIP format support
450
+ ✅ You have existing rubyzip code to maintain
451
+ ✅ Pure simplicity is more important than features
452
+ ✅ ZIP compatibility is your only requirement
453
+
454
+ === Choose 7-Zip When:
455
+
456
+ ✅ Maximum compression ratio is required
457
+ ✅ You're working with very large files
458
+ ✅ Command-line interface is acceptable
459
+ ✅ Native C++ performance is essential
460
+ ✅ You need the broadest format support
461
+
462
+ === Choose WinRAR When:
463
+
464
+ ✅ You specifically need RAR format write support
465
+ ✅ You're primarily on Windows platform
466
+ ✅ You have a WinRAR license
467
+ ✅ Recovery records are critical
468
+
469
+ == Migration Guides
470
+
471
+ === From Rubyzip to Omnizip
472
+
473
+ Simplest migration - add one line:
474
+
475
+ [source,ruby]
476
+ ----
477
+ # Add this at the top of your file
478
+ require 'omnizip/rubyzip_compat'
479
+
480
+ # All existing Zip::* code now uses Omnizip
481
+ Zip::File.open('archive.zip') do |zip|
482
+ # Works exactly the same
483
+ end
484
+ ----
485
+
486
+ See link:guides/migration-rubyzip.html[Complete Migration Guide]
487
+
488
+ === From 7-Zip CLI to Omnizip API
489
+
490
+ Replace command-line calls with Ruby API:
491
+
492
+ [source,ruby]
493
+ ----
494
+ # Instead of: system('7z a archive.7z files/')
495
+ Omnizip::Archive.create('archive.7z', format: :seven_zip) do |archive|
496
+ archive.add_directory('files/')
497
+ end
498
+ ----
499
+
500
+ == Performance Comparison
501
+
502
+ [cols="2,1,1,1,1"]
503
+ |===
504
+ |Operation |Omnizip |rubyzip |7-Zip |Relative
505
+
506
+ |Create 100MB ZIP
507
+ |30s
508
+ |28s
509
+ |3s
510
+ |Similar to rubyzip
511
+
512
+ |Extract 100MB ZIP
513
+ |18s
514
+ |17s
515
+ |2s
516
+ |Comparable
517
+
518
+ |Create 100MB 7z
519
+ |45s
520
+ |N/A
521
+ |5s
522
+ |N/A (unique feature)
523
+
524
+ |LZMA2 compression
525
+ |60s
526
+ |N/A
527
+ |4s
528
+ |Pure Ruby trade-off
529
+ |===
530
+
531
+ *Environment: MacBook Pro M1, Ruby 3.2, 10KB files*
532
+
533
+ == Platform Support
534
+
535
+ [cols="2,1,1,1,1"]
536
+ |===
537
+ |Platform |Omnizip |rubyzip |7-Zip |WinRAR
538
+
539
+ |Linux
540
+ |✅ Full
541
+ |✅ Full
542
+ |✅ Full
543
+ |⚠️ Limited
544
+
545
+ |macOS
546
+ |✅ Full
547
+ |✅ Full
548
+ |✅ Full
549
+ |⚠️ Limited
550
+
551
+ |Windows
552
+ |✅ Full
553
+ |✅ Full
554
+ |✅ Full
555
+ |✅ Native
556
+
557
+ |BSD
558
+ |✅ Full
559
+ |✅ Full
560
+ |✅ Full
561
+ |❌
562
+ |===
563
+
564
+ == Summary
565
+
566
+ Omnizip successfully combines:
567
+
568
+ * **rubyzip's ease of use** with drop-in API compatibility
569
+ * **7-Zip's powerful compression** with 95%+ algorithm parity
570
+ * **Unique Ruby-native capabilities** not found in other tools
571
+
572
+ This makes Omnizip ideal for Ruby applications needing advanced compression beyond basic ZIP/Deflate while maintaining compatibility and portability.
573
+
574
+ == See Also
575
+
576
+ * link:getting-started/installation.html[Installation Guide]
577
+ * link:guides/migration-rubyzip.html[Migration from Rubyzip]
578
+ * link:getting-started/quick-start.html[Quick Start Tutorial]
579
+ * link:reference/index.html[API Reference]
@@ -0,0 +1,129 @@
1
+ ---
2
+ title: Core Concepts
3
+ nav_order: 40
4
+ ---
5
+
6
+ == Core Concepts
7
+
8
+ Understanding the fundamental concepts behind Omnizip's architecture.
9
+
10
+ === Registry-Based Architecture
11
+
12
+ Omnizip uses a registry pattern for extensibility:
13
+
14
+ ==== Algorithm Registry
15
+
16
+ Manages compression algorithms:
17
+
18
+ [source,ruby]
19
+ ----
20
+ # List algorithms
21
+ Omnizip::AlgorithmRegistry.registered
22
+
23
+ # Get algorithm
24
+ algorithm = Omnizip::AlgorithmRegistry.get(:lzma2).new(level: 9)
25
+
26
+ # Register custom algorithm
27
+ Omnizip::AlgorithmRegistry.register(:custom, CustomAlgorithm)
28
+ ----
29
+
30
+ ==== Filter Registry
31
+
32
+ Manages preprocessing filters:
33
+
34
+ [source,ruby]
35
+ ----
36
+ # List filters
37
+ Omnizip::FilterRegistry.registered
38
+
39
+ # Get filter
40
+ filter = Omnizip::FilterRegistry.get(:bcj_x86).new
41
+ ----
42
+
43
+ ==== Format Registry
44
+
45
+ Manages archive formats:
46
+
47
+ [source,ruby]
48
+ ----
49
+ # List formats
50
+ Omnizip::FormatRegistry.registered
51
+
52
+ # Get format
53
+ format = Omnizip::FormatRegistry.get(:seven_zip)
54
+ ----
55
+
56
+ === Compression Pipeline
57
+
58
+ Omnizip's compression process:
59
+
60
+ . **Input** - Raw data stream
61
+ . **Filter Chain** - Optional preprocessing (BCJ, Delta)
62
+ . **Compression** - Algorithm compression (LZMA2, etc.)
63
+ . **Archive Container** - Format packaging (7z, ZIP)
64
+ . **Output** - Compressed archive
65
+
66
+ === Solid Compression
67
+
68
+ Solid archives use a shared dictionary across multiple files:
69
+
70
+ * **Advantage**: 10-30% better compression for similar files
71
+ * **Disadvantage**: Cannot extract individual files independently
72
+ * **Best for**: Source code, text documents, log files
73
+
74
+ === Multi-Volume Archives
75
+
76
+ Split large archives across multiple files:
77
+
78
+ * **Naming**: archive.7z.001, archive.7z.002, etc.
79
+ * **Use case**: Large files, optical media, file size limits
80
+ * **Extraction**: Automatic from any volume
81
+
82
+ === Encryption
83
+
84
+ Omnizip supports AES-256 encryption:
85
+
86
+ * **7z**: Header + file encryption
87
+ * **RAR5**: File-only encryption
88
+ * **Algorithm**: AES-256-CBC with PBKDF2 key derivation
89
+
90
+ === Checksums
91
+
92
+ Integrity verification:
93
+
94
+ * **CRC32**: Fast, common checksum
95
+ * **CRC64**: More reliable for large files
96
+ * **SHA256**: Cryptographic verification
97
+ * **BLAKE2sp**: Fast, secure checksum
98
+
99
+ === Compression Algorithms
100
+
101
+ ==== Dictionary-Based (LZMA/LZMA2)
102
+
103
+ * Sliding window dictionary
104
+ * Range encoding for probabilities
105
+ * High compression ratios
106
+
107
+ ==== Statistical (BZip2)
108
+
109
+ * Burrows-Wheeler Transform
110
+ * Move-to-Front coding
111
+ * Huffman encoding
112
+
113
+ ==== Context Modeling (PPMd)
114
+
115
+ * Prediction by Partial Matching
116
+ * Context-based probability models
117
+ * Excellent for text
118
+
119
+ ==== Dictionary + Huffman (Deflate)
120
+
121
+ * LZ77 sliding window
122
+ * Huffman coding
123
+ * ZIP-compatible
124
+
125
+ === See Also
126
+
127
+ * link:../developer/architecture[Architecture Details]
128
+ * link:../guides/compression-algorithms/[Algorithm Guides]
129
+ * link:../guides/archive-formats/[Format Guides]